借助Paramiko通过Python实现linux远程登陆及sftp的操作
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux,Solaris,BSD,MacOSX,Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。
本文重点给大家介绍借助Paramiko通过Python实现linux远程登陆及sftp操作。
1.使用shell命令
$sshpass-p${passwd}ssh-p${port}-l${user}-oStrictHostKeyChecking=noxx.xx.xx.xx"ls-l"
然后你会发现,你的输出有很多你并不需要,但是又不去不掉的一些信息。
对于shell命令,可以直接使用管道,或者将标准输出重定向到文件的方法取得执行结果。
2.使用subprocess
通过Python可以想到使用os.popen,os.system,commands,subprocess等一些命令执行库来间接获取系统信息。这些库获取的output不仅有标准输出,还包含标准错误信息。所以每次都要对output进行数据清理,然后整理格式化,才能得到我们想要的数据。
importsubprocess ssh_cmd="sshpass-p${passwd}ssh-p22-lroot-oStrictHostKeyChecking=noxx.xx.xx.xx'ls-l'" status,output=subprocess.getstatusoutput(ssh_cmd) #数据清理
总之,间接使用ssh命令的几个问题:
需要额外安装sshpass(如果不免密的话)
干扰信息太多,数据清理、格式化相当麻烦
代码实现不够优雅,可读性太差
ssh连接不能复用,一次连接仅能执行一次命令
代码无法全平台,仅能在Linux和OSX上使用
3.使用Paramiko
安装
python3-mpipinstallparamiko
方法1:基于用户名和密码的sshclient方式登录
该方法无法复用ssh连接。
importparamiko ssh=paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #建立连接 ssh.connect("xx.xx.xx.xx",username="root",port=22,password="you_password") #使用这个连接执行命令 ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command("ls-l") #获取输出 print(ssh_stdout.read()) #关闭连接 ssh.close()
方法2:基于用户名和密码的transport方式登录
该方法可以复用连接。
importparamiko #建立连接 trans=paramiko.Transport(("xx.xx.xx.xx",22)) trans.connect(username="root",password="you_passwd") ssh=paramiko.SSHClient() ssh._transport=trans ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh_stdin,ssh_stdout,ssh_stderr=ssh.exec_command("ls-l") print(ssh_stdout.read()) #关闭连接 trans.close()
方法3:基于公钥的SSHClient方式登录
该方法无法复用ssh连接。
importparamiko #指定本地的RSA私钥文件 #如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。 pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345') #建立连接 ssh=paramiko.SSHClient() ssh.connect(hostname='xx.xx.xx.xx', port=22, username='you_username', pkey=pkey) #执行命令 stdin,stdout,stderr=ssh.exec_command('ls-l') #结果放到stdout中,如果有错误将放到stderr中 print(stdout.read()) #关闭连接 ssh.close()
方法4:基于公钥的Transport方式登录
该方法可以复用连接。
importparamiko #指定本地的RSA私钥文件 #如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。 pkey=paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa',password='12345') #建立连接 trans=paramiko.Transport(('xx.xx.xx.xx',22)) trans.connect(username='you_username',pkey=pkey) ssh=paramiko.SSHClient() ssh._transport=trans #执行命令,和传统方法一样 stdin,stdout,stderr=ssh.exec_command('df-hl') print(stdout.read().decode()) #关闭连接 trans.close()
sftp文件传输
importparamiko trans=paramiko.Transport(('xx.xx.xx.xx',22)) #建立连接 trans.connect(username='you_username',password='you_passwd') #实例化一个sftp对象,指定连接的通道 sftp=paramiko.SFTPClient.from_transport(trans) #发送文件 sftp.put(localpath='/tmp/11.txt',remotepath='/tmp/22.txt') #下载文件 sftp.get(remotepath='/tmp/22.txt',localpath='/tmp/33.txt') trans.close()
参考
https://www.linuxprobe.com/log-in-to-remote-service-python.html
总结
到此这篇关于借助Paramiko通过Python实现linux远程登陆及sftp的操作的文章就介绍到这了,更多相关pythonparamiko实现远程登陆sftp内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。