Python的paramiko库实现远程连接服务器

paramiko介绍

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。

paramiko包含两个核心组建,分别是SSHClient和SFTPClient,前者的作用类似于Linux下的ssh命令,后者的作用类似于Linux下的sftp命令。SSHClient类是对SSH会话的封装,该类封装了传输(transport),通道(channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。SFTPClient类是对SFTP客户端的封装,用以实现远程文件操作,如文件上传,下载,修改文件权限等操作。

SSHClient类

以下介绍4种常用方法:

1、set_missing_host_key_poilcy: 设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略,分别是AutoAddPolicy,RejectPolicy(默认策略)与WarningPolicy,分别表示自动添加服务器到know_hosts文件,拒绝本次连接,警告并将服务器添加到know_hosts文件中

2、connect: connect方法实现远程连接与认证,对于该方法,只有hostname是必传参数

3、exec_command: 在远程服务器执行Linux命令的方法,返回3个数据,第一个是输入命令,第二个是命令执行返回的结果,第三个是命令错误时返回的结果

4、opne_sftp: 在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象

示例代码:

#对paramiko的SSHclient类进行实例化
ssh = paramiko.SSHClient()
#设置应对策略,AutoAddPolic自动添加服务器到know_hosts文件
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
#输入服务器地址,账户名,密码
ssh.connect(hostname='xxx.xxx.xx.xxx',port=22,username='user',password='pasword')
#执行命令
stdin,stdon,stderr = ssh.exec_command('pwd;2222')
#read()读取返回pwd执行的结果(以byte形式返回,可以使用decode进行解码成字符串),如果错误则返回空
print(stdon.read().decode('utf-8'))
#返回错误的执行结果(以byte形式返回,可以使用decode进行解码成字符串),如果正确则返回空
print(stderr.read().decode('utf-8'))
#在当前ssh会话的基础上创建一个sftp会话,该方法会返回一个SFTPclient对象
ssh_ftp = ssh.open_sftp()

 

SFTPClient类

以下为常用的方法

  • put: 上传本地文件到远程服务器
  • get: 从远程服务器下载文件到本地
  • mkdir: 在远程服务器上创建目录
  • remove: 删除远程服务器中的文件
  • rmdir: 删除远程服务器中的目录
  • rename: 重命名远程服务器中的文件或目录
  • stat: 获取远程服务器中文件的详细信息
  • listdir: 列出远程服务器中指定目录下的内容
#get_transport建立通道,paramiko.SFTPClient.from_transport创建一个已联通的SFTP客户端通道
ssh_ftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
#本地文件路径
localpath = r'./test1.txt'
#远程上传路径
remotepath = r'/home/linhao/1/test_1.txt'
#将本地文件,上传到服务器
ssh_ftp.put(localpath,remotepath)
localpath_1 = './test.txt'
#从服务器下载文件到本地
ssh_ftp.get(remotepath,localpath_1)
#关闭ssh连接
ssh.close()

 

posted @ 2022-06-28 15:32  测试-13  阅读(924)  评论(0编辑  收藏  举报