如何借助Paramiko通过Python实现linux远程登陆

这篇文章给大家分享的是有关如何借助Paramiko通过Python实现linux远程登陆的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。

如何借助Paramiko通过Python实现linux远程登陆

由于使用的是python这样的能够跨平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一个平台连接到另外一个平台,进行一系列的操作时,paramiko是最佳工具之一。

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 进行数据清理,然后整理格式化,才能得到我们想要的数据。

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 -m pip install paramiko

方法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()

感谢各位的阅读!关于“如何借助Paramiko通过Python实现linux远程登陆”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

发布于 2021-03-24 01:19:50
收藏
分享
海报
0 条评论
158
上一篇:Python如何实现鼠标自动在屏幕上随机移动功能 下一篇:Python如何实现对adb命令封装
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码