paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。
本文重点给大家介绍借助Paramiko通过Python实现linux远程登陆及sftp操作。
1. 使用shell命令
$ sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx "ls -l"
然后你会发现,你的输出有很多你并不需要,但是又不去不掉的一些信息。
对于shell 命令,可以直接使用管道,或者将标准输出重定向到文件的方法取得执行结果。
2. 使用 subprocess
通过Python可以想到使用 os.popen,os.system,commands,subprocess 等一些命令执行库来间接获取系统信息 。这些库获取的 output 不仅有标准输出,还包含标准错误信息。所以每次都要对 output 进行数据清理,然后整理格式化,才能得到我们想要的数据。
import subprocess ssh_cmd = "sshpass -p ${passwd} ssh -p 22 -l root -o StrictHostKeyChecking=no xx.xx.xx.xx 'ls -l'" status, output = subprocess.getstatusoutput(ssh_cmd) # 数据清理
总之,间接使用ssh命令的几个问题:
需要额外安装 sshpass(如果不免密的话)
干扰信息太多,数据清理、格式化相当麻烦
代码实现不够优雅,可读性太差
ssh 连接不能复用,一次连接仅能执行一次命令
代码无法全平台,仅能在 Linux 和 OSX 上使用
3. 使用Paramiko
安装
python3 -m pip install paramiko
方法1:基于用户名和密码的 sshclient 方式登录
该方法无法复用ssh连接。
import paramiko 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 方式登录
该方法可以复用连接。
import paramiko # 建立连接 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连接。
import paramiko # 指定本地的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 方式登录
该方法可以复用连接。
import paramiko # 指定本地的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 文件传输
import paramiko 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的操作的文章就介绍到这了,更多相关python paramiko实现远程登陆 sftp内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍python 实现自动远程登陆scp文件实例代码,包括了python 实现自动远程登陆scp文件实例代码的使用技巧和注意事项,需要的朋友参考一下 python 实现自动远程登陆scp文件实例代码 实现实例代码: 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍python paramiko远程服务器终端操作过程解析,包括了python paramiko远程服务器终端操作过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了python paramiko远程服务器终端操作过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.with open写文件到本地 2.param
本文向大家介绍使用python远程操作linux过程解析,包括了使用python远程操作linux过程解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了使用python远程操作linux过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在云服务测试中,往往需要我们进入云服务内容进行相关内容的测试。这测试可以使用平台自身的noV
本文向大家介绍xshell 远程登陆CentOS7 免密登陆的思路详解,包括了xshell 远程登陆CentOS7 免密登陆的思路详解的使用技巧和注意事项,需要的朋友参考一下 首先说一下大体的思路: 1. 以密码登陆CentOS系统 2. 配置ssh 3. xshell 生成秘钥 4. 进行免密登陆 软件、设备: xshell(下载地址(免费版),也可以自行百度下载) CentOS7.5
本文向大家介绍解决ssh远程登陆linux显示-bash-4.1$的问题,包括了解决ssh远程登陆linux显示-bash-4.1$的问题的使用技巧和注意事项,需要的朋友参考一下 cp -pr /etc/skel/.bash* /home/test/ #/home/test是用户目录 改变用户家目录:usermod -md /tmptest test 以上就是小编为大家带来的解决ssh远程登陆li
本文向大家介绍python实现的登陆Discuz!论坛通用代码分享,包括了python实现的登陆Discuz!论坛通用代码分享的使用技巧和注意事项,需要的朋友参考一下 代码如下: