如何借助Paramiko通过Python实现linux远程登陆
这篇文章给大家分享的是有关如何借助Paramiko通过Python实现linux远程登陆的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。
由于使用的是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远程登陆”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
推荐阅读
-
Python中怎么动态声明变量赋值
这篇文章将为大家详细讲解有关Python中怎么动态声明变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中变量的存储原理是什么
-
Python中怎么引用传递变量赋值
这篇文章将为大家详细讲解有关Python中怎么引用传递变量赋值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文...
-
python中怎么获取程序执行文件路径
python中怎么获取程序执行文件路径,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的...
-
Python中如何获取文件系统的使用率
Python中如何获取文件系统的使用率,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴...
-
Python中怎么获取文件的创建和修改时间
这篇文章将为大家详细讲解有关Python中怎么获取文件的创建和修改时间,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读...
-
python中怎么获取依赖包
今天就跟大家聊聊有关python中怎么获取依赖包,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据...
-
python怎么实现批量文件加密功能
-
python中怎么实现threading线程同步
小编给大家分享一下python中怎么实现threading线程同步,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!...
-
python下thread模块创建线程的方法
本篇内容介绍了“python下thread模块创建线程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来...