借助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 相关文章推荐
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
详解Python进程间通信之命名管道
Aug 28 Python
Python实现检测文件MD5值的方法示例
Apr 11 Python
python实现批量修改图片格式和尺寸
Jun 07 Python
Django 多语言教程的实现(i18n)
Jul 07 Python
django用户登录和注销的实现方法
Jul 16 Python
BP神经网络原理及Python实现代码
Dec 18 Python
python SVD压缩图像的实现代码
Nov 05 Python
如何基于python对接钉钉并获取access_token
Apr 21 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
python3爬虫中多线程进行解锁操作实例
Nov 25 Python
详解Python描述符的工作原理
Jun 11 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
PHP4与PHP5的时间格式问题
2008/02/17 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
PHP执行普通shell命令流程解析
2020/08/24 PHP
js图片卷帘门导航菜单特效代码分享
2015/09/10 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
jQuery实现圣诞节礼物传送(花式轮播)
2016/12/25 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
vue组件学习教程
2017/09/09 Javascript
详解动画插件wow.js的使用方法
2017/09/13 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
JS数组Object.keys()方法的使用示例
2019/06/05 Javascript
javascript实现移动端上传图片功能
2020/08/18 Javascript
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
在Python的Django框架中编写错误提示页面
2015/07/22 Python
python爬虫之xpath的基本使用详解
2018/04/18 Python
Python实现点云投影到平面显示
2020/01/18 Python
Python如何生成xml文件
2020/06/04 Python
Selenium及python实现滚动操作多种方法
2020/07/21 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
Weblogic的布署方式
2013/08/23 面试题
求职自荐信怎么写
2014/03/06 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
就业推荐表导师评语
2014/12/31 职场文书
百家讲坛观后感
2015/06/12 职场文书
银行工作心得体会范文
2016/01/23 职场文书
pandas 实现将NaN转换为None
2021/05/14 Python
Oracle删除归档日志及添加定时任务
2022/06/28 Oracle