借助Paramiko通过Python实现linux远程登陆及sftp的操作


Posted in Python onMarch 16, 2020

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 相关文章推荐
Python2.x中文乱码问题解决方法
Jun 02 Python
Python cx_freeze打包工具处理问题思路及解决办法
Feb 13 Python
Mac 上切换Python多版本
Jun 17 Python
Python进程间通信Queue实例解析
Jan 25 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
python assert的用处示例详解
Apr 01 Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 Python
Pytorch实现各种2d卷积示例
Dec 30 Python
如何用python免费看美剧
Aug 11 Python
详解python日志输出使用配置文件格式
Feb 10 Python
python实现银行账户系统
Feb 22 Python
Python OpenCV实现传统图片格式与base64转换
Jun 13 Python
Django ValuesQuerySet转json方式
Mar 16 #Python
Django 再谈一谈json序列化
Mar 16 #Python
django实现将后台model对象转换成json对象并传递给前端jquery
Mar 16 #Python
Python读写操作csv和excle文件代码实例
Mar 16 #Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 #Python
Python Django2 model 查询介绍(条件、范围、模糊查询)
Mar 16 #Python
python高阶函数map()和reduce()实例解析
Mar 16 #Python
You might like
简单的php新闻发布系统教程
2014/05/09 PHP
php使用curl简单抓取远程url的方法
2015/03/13 PHP
PHP连接MSSQL方法汇总
2016/02/05 PHP
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
控制页面按钮在后台执行期间不重复提交的JS方法
2013/06/24 Javascript
JavaScript返回网页中超链接数量的方法
2015/04/03 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
快速解决Vue项目在IE浏览器中显示空白的问题
2018/09/04 Javascript
Node.js如何对SQLite的async/await封装详解
2019/02/14 Javascript
JavaScript数值类型知识汇总
2019/11/17 Javascript
python3获取当前文件的上一级目录实例
2018/04/26 Python
django manage.py扩展自定义命令方法
2018/05/27 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
Django实现跨域请求过程详解
2019/07/25 Python
使用OpenCV对车道进行实时检测的实现示例代码
2020/06/19 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
美国新兴城市生活方式零售商:VILLA
2017/12/06 全球购物
高中毕业生自我鉴定
2013/11/03 职场文书
毕业生就业自荐书
2013/12/15 职场文书
2014年师德师风学习材料
2014/05/16 职场文书
大学新闻系自荐书
2014/05/31 职场文书
求职自荐信范文(优秀篇)
2015/03/27 职场文书
演讲比赛通讯稿
2015/07/18 职场文书
班主任工作总结范文
2015/08/13 职场文书
小学学习委员竞选稿
2015/11/20 职场文书
导游词之鲁迅祖居
2019/10/17 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫