借助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的Cookie.py模块支持冒号做key的方法
Dec 28 Python
Python常用内置函数总结
Feb 08 Python
Python实现的数据结构与算法之快速排序详解
Apr 22 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
深入理解Python爬虫代理池服务
Feb 28 Python
pandas数据分组和聚合操作方法
Apr 11 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
将python字符串转化成长表达式的函数eval实例
May 11 Python
基于django micro搭建网站实现加水印功能
May 22 Python
基于pytorch中的Sequential用法说明
Jun 24 Python
Python答题卡识别并给出分数的实现代码
Jun 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
BBS(php & mysql)完整版(二)
2006/10/09 PHP
百度ping方法使用示例 自动ping百度
2014/01/26 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
2014/08/20 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
动态为事件添加js代码示例
2009/02/15 Javascript
JQuery中html()方法使用不当带来的陷阱
2011/04/07 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
[02:31]DOTA2帕克 英雄基础教程
2013/11/26 DOTA
Python 编码处理-str与Unicode的区别
2016/09/06 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
python实现多层感知器
2019/01/18 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
Python处理PDF与CDF实例
2020/02/26 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
菲律宾购物网站:Lazada菲律宾
2018/04/05 全球购物
Sneaker Studio捷克:购买运动鞋
2018/07/08 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
大一新生军训时的自我评价分享
2013/12/05 职场文书
大学生自我鉴定
2013/12/08 职场文书
办理退休介绍信
2014/01/09 职场文书
《草原》教学反思
2014/02/15 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
2014年音乐教师工作总结
2014/12/03 职场文书
2016春节慰问信范文
2015/03/25 职场文书
投诉书范文
2015/07/02 职场文书
SQL SERVER实现连接与合并查询
2022/02/24 SQL Server