paramiko模块
2022/8/1 23:24:26
本文主要是介绍paramiko模块,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
paramiko是什么
paramiko包含两个核心组件:SSHClient和SFTPClient。
- SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
- SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。
paramiko的基本使用
1.SSHClient常用的方法介绍
import paramiko ssh = paramiko.SSHClient() # 第一次连接的时候一般都会提示yes/no,这是因为远程服务器没有在know_hosts文件中记录时的应对策略 # set_missing_host_key_policy()设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种: # AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认 # WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接 # RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项 # 我一般使用第一种方式 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # connect():实现远程服务器的连接与认证,对于该方法只有hostname是必传参数 # 常用参数: # hostname 连接的目标主机 # port=SSH_PORT 指定端口 # username=None 验证的用户名 # password=None 验证的用户密码 # pkey=None 私钥方式用于身份验证 # key_filename=None 一个文件名或文件列表,指定私钥文件 # timeout=None 可选的tcp连接超时时间 # allow_agent=True, 是否允许连接到ssh代理,默认为True 允许l # ook_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许 # compress=False, 是否打开压缩 ssh = connect(hostname='192.168.153.32' ,port='22', username='root', password='mypassword') # exec_command():在远程服务器执行Linux命令的方法,他会返回一个元祖一共有三个值 # stdin # stdout返回的是执行结果,如果执行失败stdout返回None # stderr返回的是错误信息,如果命令执行成功stderr返回的是None # stdout和stderr返回的都是字节,我们需要decode解码一下 stdin, stdout, stderr = ssh.exec_command('ls') print(stdout.read().decode('utf-8')) # open_sftp():在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。 # 利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作. sftp = client.open_sftp() sftp.put('test.txt','text.txt')
由于工作需要自己封装了一个工具类,提供远程操作服务器,与上传文件。
import paramiko class Ssh(object): def __init__(self, ip, username="root", password=None, private_key_path=None, port=22): # key = paramiko.RSAKey.from_private_key_file(private_key_path) self.ssh = paramiko.SSHClient() self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.ssh.connect(hostname=ip, port=port, username=username, password=password,key_filename=private_key_path) # self.t = paramiko.Transport((ip,port)) # self.t.connect(username='root',pkey=key) # self.sftp = paramiko.SFTPClient.from_transport(self.t) def cmd(self,cmd): _,stdout,stderr = self.ssh.exec_command(cmd) msg = stdout.read().decode() err = stderr.read().decode() data = { "code": 0, "msg": "" } if len(err) != 0: data['code'] = 1 data['msg'] = err else: data['code'] = 0 data['msg'] = msg return data def put(self, src, desc): try: sftp = self.ssh.open_sftp() sftp.put(src,desc) except Exception as e: return e ssh = Ssh(ip="192.168.153.32", private_key_path="C:\\Users\\Administrator\\.testssh\\linux_fyh_rsa", port=22) # print(ssh.put("C:\\Users\\Administrator\\Desktop\\sh_auto\\test\\ssh_linux.py",'/root/ssh_linux.py')) print(ssh.cmd('ls'))
这篇关于paramiko模块的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南
- 2024-11-23JAVA项目部署入门:新手必读指南
- 2024-11-23Java项目部署入门:新手必看指南
- 2024-11-23Java项目部署入门:新手必读指南
- 2024-11-23Java项目开发入门:新手必读指南
- 2024-11-23JAVA项目开发入门:从零开始的实用教程
- 2024-11-23Java项目开发入门:新手必读指南