Paramiko库讲解

news2024/9/26 1:21:25

目录

基本概念

Paramiko组件架构

Key handing类

Transport类

SFTPClient类

SSHClient类—主要使用的类

Python编写完整例子


基本概念

Paramiko是Python实现SSHv2协议的模块,支持口令认证和公钥认证两种方式

通过Paramiko可以实现通过Python进行安全的远程命令执行、文件传输等功能


Paramiko组件架构

Paramiko主要是通过不同的类来实现不同的功能

 

最常用的两个类是SSHClient类和SFTPClient类,分别提供SSH和SFTP功能

以下我们介绍Transport、SSHClient、SFTPClient、Key handing四种类来实现SSH基础功能

Key handing类

读取本地的密钥(私钥)创建密钥对象(此对象指的是数字签名),用于SSH公钥认证

使用口令认证(通过用户密码认证)时不需要此类

例子

#从文件读取RSA私钥来创建密钥对象

key=paramiko.RSAKey.from_private_key_file(r'C:\Users\exampleuser\.ssh\id_rsa')

#从文件读取DSS私钥来创建密钥对象

key=paramiko.DSSKey.from_private_key_file(r'C:\Users\exampleuser\.ssh\id_rsa')

注意

使用Key handing类时,需要提前把私钥对应的公钥拷贝到SSH服务器上,不然无法完成用户认证

Transport类

通过IP+端口号建立SSH连接

然后通过口令或公钥进行用户认证(认证通过后建立SSH Transport会话)

常用方法介绍

建立Transport对象,实例化SSH会话通道

paramiko.Transport(sock)

建立SSH会话连接,并使用密码或私钥进行身份认证。

connect(username=“,password=None,pkey=None)

关闭会话

close()

例子1通过口令认证与192.168.56.100建立SSH会话

tran = paramiko.Transport(('192.168.56.100',22))

tran.connect(username=‘client’,password=‘test’)    

tran.close()

例子2通过公钥认证与192.168.56.100建立SSH会话(提前把公钥复制到服务器上)

key = paramiko.RSAKey.from_private_key_file(r'C:\Users\exampleuser\.ssh\id_rsa')

tran = paramiko.Transport(('192.168.56.100',22))

tran.connect(username=‘client’, pkey=key)

tran.close()

#按照理论来说,公钥认证时不需要配置密码的

#但是华为设备中需要配置密码,不然实现不了

SFTPClient类

通过一个打开的SSH Transport会话创建SFTP会话通道,完成文件的上传和下载

常用方法介绍

从打开的Transport创建一个SFTP会话连接

paramiko.SFTPClient.from_transport(T,window_size=None, max_packet_size=None)

T  

一个打开的Transport会话。

window_size

(可选参数)SFTP会话窗口大小。

max_packet_size

(可选参数)SFTP会话最大数据包大小

下载指定文件

get(remotepath, localpath)

remotepath

远程文件

localpath

本地主机的目的路径(该路径应包含文件名,仅指定目录可能会导致错误)

上传指定文件

put(localpath, remotepath)

localpath

本地文件

remotepath

SFTP服务器上的目的路径(该路径应包含文件名,仅指定目录可能会导致错误)

例子(下载设备的vrpcfg.cfg文件保存到本地改名为vrptest.cfg)

tran = paramiko.Transport(('192.168.56.100',22))

tran.connect(username=‘client’,password=‘test’)

sftp=paramiko.SFTPClient.from_transport(tran)   

local_path=r'C:\Users\exampleuser\.ssh\vrptest.cfg' 

remote_path= '/vrpcfg.cfg'                      

sftp.get(remote_path, local_path)

tran.close()

SSHClient类—主要使用的类

可以实现Transport类和SFTPClient类的功能

常用方法介绍

实现远程服务器的连接与认证(完成Transport类的任务,建立SSH会话)

connect(hostname=None,port=None,username=None,password=None,key_filename=None,pkey=None)

hostname

连接的目标主机(只有该参数为必选参数)

port

指定端口(默认为22)

username

进行认证的用户名(默认为空)

password 

进行认证的用户密码(默认为空)

key_filename

一个文件名或文件列表,指定私钥文件(默认为空,类似于Key handing类)

pkey 

 指定私钥(把私钥复制过来,非私钥文件)

设置当连接到 没有已知主机密钥的 服务器时使用的策略(完成客户端对服务器的信任)

set_missing_host_key_policy(paramiko.client.AutoAddPolicy())

AutoAddPolicy

自动添加主机名及主机密钥到本地HostKeys对象(不依赖load_system_host_key的配置)即新建立ssh连接时不需要再输入yes或no进行确认。

WarningPolicy

用于记录一个未知的主机密钥的python警告并接受,功能上和AutoAddPolicy类似,但是会提示是新连接。

RejectPolicy

自动拒绝未知的主机名和密钥(依赖load_system_host_key的配置,此为默认选项)

客户端与服务器之间的信任-两者都相互信任之后建立SSH连接

服务器有客户端的公钥(或客户端输入正确的口令),可以实现服务器对客户端的信任(即用户认证可以实现)

客户端有服务器的公钥,可以实现客户端对服务器的信任

此方法解决的是客户端对服务器的信任问题

即如果此时客户端没有服务器的公钥,可以使用此策略(使得客户端直接信任服务器)

从系统文件中加载主机密钥(主机存储的关于服务器的公钥)

load_system_host_keys(filname)

filename

文件名(默认为空)

OpenSSH会把用户访问过每个计算机的公钥(public key)都记录在~/.ssh/known_hosts

在远程服务器执行Linux命令

exec_command()

在远程服务器上启动交互式shell会话

invoke_shell()

在一个会话连接中创建SFTP通道

open_sftp()

关闭连接

close()

例子

​
#建立SSH会话
client=paramiko.SSHClient()
client.connect(hostname='192.168.56.100',port=22,username=‘client',key_filename='id_rsa')
client.connect(hostname='192.168.56.100',port=22,username=‘client',password=‘123456')

#信任所有服务器(自动接收服务器密钥)
client.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())

#基于ssh会话连接,启用一个交互式shell会话
cli = client.invoke_shell()

#基于ssh会话连接,在SSH服务器上创建一个SFTP会话
sftp=client.open_sftp()

#关闭SSH会话
client.close()
​

Python编写完整例子

通过SSHClient类进行口令认证配置服务器(不同厂商的实现只是蓝色部分不一致)

前提是设备上已经配置好SSH用户等其它操作

import paramiko
import time

ip  = '192.168.0.1'
username = 'admin'
password = 'admin@123'

ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(hostname=ip,username=username,password=password)

#进入网络设备(交换机)的命令模式了
command = ssh_client.invoke_shell()
print('已经成功登录')

#输入命令(不同厂商的命令不一致,此处以华为为例子)

command.send(‘screen-length 0 temporary\n’)

# screen-length 0 temporary  显示时不分屏

#例如dis cu查看配置时直接全部显示,不用再按回车/空格键逐页/逐行显示了

command.send('sys\n')
command.send('dis cu\n ')

command.send('dis memory\n')
time.sleep(1)             #在敲命令时间隔一段时间在敲下一跳命令


#截屏 将输入的命令显示的内容显示出来
outup = command.recv(65535).decode('ascii')
print(outup)


#关闭会话
ssh_client.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Html5网页播放器的同层播放功能

Html5网页播放器的同层播放功能&#xff1a; 在Android手机上使用H5播放视频时&#xff0c;大多数的国内浏览器厂商都会在视频播放时劫持<video>标签&#xff0c;使用浏览器自带的播放器播放视频&#xff0c;而且播放器会处于最高层级&#xff0c;视频上面无法显示其它h…

数影周报:字节跳动员工违规获取TikTok用户数据,阿里组织调整

本周看点&#xff1a;字节跳动员工违规获取TikTok用户数据&#xff1b;钉钉宣布用户数破6 亿&#xff1b;阿里组织调整&#xff1b;星尘数据完成 5000 万元 A 轮融资...... 数据安全那些事 字节跳动员工违规获取TikTok用户数据 字节跳动旗下热门应用TikTok日前曝出严重风波。字…

郭德纲落选,冯巩、赵炎上榜,国家非物质文化遗产传承人评选落幕

根据国家广电局26日消息&#xff0c;经过激烈的竞争&#xff0c;国家非物质文化遗产传承人评选工作&#xff0c;已经顺利落下帷幕。 在此次评选活动当中&#xff0c;评委会一致审议通过&#xff0c;著名相声演员冯巩和赵炎&#xff0c;被评为了非物质文化遗产传承人。而呼声很高…

Linux | 进程理解 | 进程的终止,等待与替换 | 环境变量的介绍与使用

文章目录进程终止进程终止的方法操作系统是怎么终止进程的&#xff1f;进程等待为何需要等待进程&#xff1f;怎么等待一个进程&#xff1f;非阻塞式等待进程替换什么是进程替换&#xff1f;为什么要进程替换&#xff1f;怎样替换一个进程&#xff1f;exec系列函数环境变量用命…

企业微信开发(一)常见问题收集及解决方案

持续收集企业微信开发中遇到疑难杂症&#xff0c;并给出相应的解决方案 一、好友上限&#xff08;84061&#xff09; 背景&#xff1a;达到添加好友数上限的员工&#xff0c;新增自动通过的好友&#xff0c;无法拉取到客户信息。 根因&#xff1a;企业微信业务限制 员工添加的…

启辰全面转型新能源,能否创造风日产第二增长曲线?

随着新能源汽车市占率的不断增长&#xff0c;传统汽车大厂加大了在新能源汽车领域的布局。这其中决心最大的当属东风日产&#xff0c;第二品牌——“启辰”全面转型新能源&#xff0c;告别纯然有车开发。 12月30日&#xff0c;以“新科技 新生活”为主题的第二十届广州车展盛大…

Linux系统定时信号SIGALRM的触发与alarm函数的使用

1、 定时信号SIGALRM的用途 在编程的过程中&#xff0c;很多时候我们需要为程序设置一个闹钟&#xff0c;然后到了闹钟设定的时刻然后再去采取相关的操作。比如进行socket编程时&#xff0c;如果客户端长时间没有与服务器进行交互&#xff0c;需要服务器在一定时间之后主动关闭…

Linux | 权限管理

啊我摔倒了..有没有人扶我起来学习.... &#x1f471;个人主页&#xff1a;《CGod的个人主页》\color{Darkorange}{《CGod的个人主页》}《CGod的个人主页》交个朋友叭~ &#x1f492;个人社区&#xff1a;《编程成神技术交流社区》\color{Darkorange}{《编程成神技术交流社区》…

Vue(二)

1. 模板语法 1.1 实现效果 1.2 模板的理解 不加v-bind就相当于直接把双引号里的东西当成字符串执行&#xff0c;加了bind双引号里的东西就当成js表达式执行 v-bind:可以简写成&#xff1a; 起始标签和结束标签中间夹着的就是标签体 <!DOCTYPE html> <html><hea…

【数据结构】插入排序、希尔排序、冒泡排序、选择排序

文章目录 一、直接插入排序 思想 程序代码 时间复杂度 二、希尔排序 思想 程序代码 时间复杂度 三、冒泡排序 思想 程序代码 时间复杂度 四、选择排序 思想 程序代码 时间复杂度 一、直接插入排序 思想 直接插入排序有些类似于我们玩扑克牌时的整理牌序动作&a…

目标检测中常见的神经网络组成层------Pytorch

物体检测中常见的神经网络组成层 文章目录物体检测中常见的神经网络组成层卷积层激活函数层池化层Dropout层全连接层常见的物体检测算法常用卷积层、池化层、全连接层、激活函数层、Dropout层。 卷积层 CNN–各层的介绍_Miracle Fan的博客-CSDN博客_cnn各层介绍 在pytorch中…

Python3入门基础(08)一个函数

Python3 函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。 函数能提高应用的模块性&#xff0c;和代码的重复利用率。你已经知道Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0…

Windows 11 连接 hercules zOS Websphere MQ 配置

基本配置 zOS v1.10 基本配置可以先参考下面教程 ubuntu 编译 hercules 主机安装 z/OS 教程 zOS MQ 版本为 CSQ700 Windows 11 IBM MQ 版本为最新 9.x IBM MQ 官网有开发者版本可以免费下载&#xff0c;档名如下 mqadv_dev931_windows.zip (全名为 IBM MQ Advanced for Devel…

kafka — 2、基础环境搭建

前述 kafka的运行依赖于zooKeeper&#xff0c;所以在搭建kafka的环境之前需要搭建zookeeper环境。 zooKeeper&#xff1a; ZooKeeper是一个分布式协调服务&#xff0c;它的主要作用是为分布式系统提供一致性服务&#xff0c;可以保证数据在集群间的事务一致性&#xff0c;提供…

Volatile不保证原子性

目录 前言 原子性 代码测试 为什么出现数值丢失 如何解决 其它解决方法 字节码指令表 前言 通过前面对JMM的介绍&#xff0c;我们知道&#xff0c;各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作后在写回到主内存中的。 这就可能存在一…

Java Iterator(迭代器)

Java Iterator&#xff08;迭代器&#xff09;不是一个集合&#xff0c;它是一种用于访问集合的方法&#xff0c;可用于迭代 ArrayList 和 HashSet 等集合。 Iterator 是 Java 迭代器最简单的实现&#xff0c;ListIterator 是 Collection API 中的接口&#xff0c; 它扩展了 I…

微信小程序和ros2进行通信

微信小程序和ros2进行通信环境配置ubuntu下安装ros2ubuntu安装mqtt库windows安装微信开发者工具主要功能模块介绍ROS2基础程序讲解微信小程序基础程序讲解编译及运行ros2程序编译及运行微信小程序主要事项ROS2做为一款优秀的机器人操作系统软件&#xff0c;其搭载了丰富的机器人…

深耕低代码领域20年,这个老牌低代码平台有多靠谱

编者按&#xff1a;市面上低代码平台多如牛毛&#xff0c;用户在选型低代码平台时该如何甄别&#xff1f;本文通过介绍20年的老品牌低代码平台的特性&#xff0c;展示了优秀第低代码平台的魅力。 关键词&#xff1a;老厂商&#xff0c;私有化部署&#xff0c;源码交付&#xf…

实现effect的stop和onStop功能

06_实现effect的stop和onStop功能 一、实现stop &#xff08;一&#xff09;单元测试 it(stop, () > {let dummy;const obj reactive({ prop: 1 });const runner effect(() > {dummy obj.prop;});obj.prop 2;expect(dummy).toBe(2);stop(runner);obj.prop 3;expe…

zookeeper学习笔记1(小D课堂)

win和linux双环境安装zookeeper 我们不点击这个download。 进行解压&#xff1a; 我们进入到conf目录。 我们给这个文件进行重命名。 接下来我们去打开它&#xff0c;去修改一下配置&#xff1a; 我们先去掉这部分注释。 去掉注释&#xff0c;一共就这些内容。 tickTime是我们的…