借助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实现封装得到virustotal扫描结果
Oct 05 Python
简单介绍Python中的readline()方法的使用
May 24 Python
python 读取excel文件生成sql文件实例详解
May 12 Python
Python编写登陆接口的方法
Jul 10 Python
利用django如何解析用户上传的excel文件
Jul 24 Python
在python中使用xlrd获取合并单元格的方法
Dec 26 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
Django中密码的加密、验密、解密操作
Dec 19 Python
python判断两个序列的成员是否一样的实例代码
Mar 01 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
Jun 02 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
python实现计算图形面积
Feb 22 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 根据IP地址控制访问的代码
2010/04/22 PHP
php中的动态调用实例分析
2015/01/07 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
window.location不跳转的问题解决方法
2014/04/17 Javascript
js动态移动滚动条至底部示例代码
2014/04/24 Javascript
搭建pomelo 开发环境
2014/06/24 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
jQuery动态加载css文件实现方法
2016/06/15 Javascript
AngularJS  $on、$emit和$broadcast的使用
2016/09/05 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
layui问题之模拟table表格中的选中按钮选中事件的方法
2019/09/20 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
2020/11/16 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
python 字典 按key值大小 倒序取值的实例
2018/07/06 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
使用python求解二次规划的问题
2020/02/29 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
英国领先的NHS批准的在线药店:Pharmacy2U
2017/01/06 全球购物
英国探险旅游专家:Explore
2018/12/20 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
园林毕业生自我鉴定范文
2013/12/29 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
2014年保卫科工作总结
2014/12/05 职场文书
自荐信怎么写
2015/03/04 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers