#1. 介绍

这篇文章简单地介绍了python的paramiko模块的用法,paramiko实现了SSH协议,能够方便地与远程计算机交互。简单的说,就是你在terminal下执行的如下语句,现在可以通过python的paramiko实现了。

# 执行shell语句

ssh -i ~/.ssh/id_rsa -p 1098 rds@12.164.145.21 -e 'ls -al'

# 拷贝数据到远程计算机

scp -i ~/.ssh/id_rsa -P 1098 -r data rds@12.164.145.21:~/data

这里不讨论shell与python实现的优缺点,如果你没有需求,也不会看到这篇博客了。我个人使用paramiko是为了使用python的多线程,并发地对多台远程计算机执行相同的操作。

这篇博客虽然篇幅不大,但是,可能是目前网络上最好的中文入门教程了。那就开始吧!

2. 安装

安装非常简单,直接使用pip安装即可:

sudo pip instal paramiko

3. 建立SSH连接

使用密码连接:

import paramiko

ssh = paramiko.SSHClient()

#这行代码的作用是允许连接不在know_hosts文件中的主机。

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect("IP", port, "username", "password")

使用私钥连接:

ssh = paramiko.SSHClient()

ssh.connect('10.120.48.109', port, '用户名',

key_filename='私钥')

连接以后可以执行shell命令:

In [8]: ssh.exec_command('ls')

Out[8]:

(>>,

>>,

>>)

执行shell命令以后,并不会立即打印命令的执行结果,而是返回几个Channel, 只能像下面这样获取输出:

In [9]: stdin, stdout, stderr = ssh.exec_command('ls')

In [10]: print stdout.readlines()

['AgentBackkup_2015-06-11\n', 'AgentBackup\n', 'log\n', 'mysql.sh\n', 'rdsAgent\n']

注意: 命令执行出错并不会抛出异常,所以,对于命令出错需要根据自己的需求进行相应的处理:

In [54]: stdin, stdout, stderr = ssh.exec_command('cat file_not_found')

In [55]: print stdout.readlines()

[]

In [56]: print stderr.readlines()

[u'cat: file_not_found: No such file or directory\n']

In [57]: stdin, stdout, stderr = ssh.exec_command('ls')

In [58]: print stderr.readlines()

[]

4. SCP vs SFTP

通过paramiko还可以传输文件,这是我写这篇博客的主要原因。搜了很多博客,都没有说明白如何通过paramiko在计算机之间传输文件,通过阅读官方文档,发现有如下两种方式:

sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())

sftp = ssh.open_sftp()

即新建一个SFTPClient对象,该对象复用之前的SSH连接,因此,我们使用sftp传输文件时,不需要再次进行用户认证。

文件上传

In [59]: sftp.put('memory.py', 'memory.py')

Out[59]:

文件下载

In [60]: sftp.get('memory.py', 'backup.py')

执行命令

paramiko并没有提供一个叫做scp的子模块,如果我们希望在计算机之间传输数据,可以通过sftp(sftp实现了scp所有的功能,也就没有必再实现一个scp)传输文件,还可以通过sftp执行命令,如下所示:

In [44]: sftp.listdir()

Out[44]:

['.viminfo',

'.bash_logout',

'.bash_history',

'AgentBackkup_2015-06-10',

'AgentBackup',

'rdsAgent']

In [45]: sftp.rename('AgentBackkup_2015-06-10', 'AgentBackkup_2015-06-11')

In [46]: sftp.listdir()

Out[46]:

['AgentBackkup_2015-06-11',

'.viminfo',

'.bash_logout',

'.bash_history',

'AgentBackup',

'rdsAgent']

sftp提供了很多命令,具体内容可以参考官方文档 。

python paramiko使用_使用python的paramiko模块实现ssh与scp功能相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

  3. python scale()函数_【Python菜鸟进阶大神】Matplotlib数据可视化007:词云

    词云是对网络文本中出现频率较高的关键词予以视觉上的突出,形成关键词云层或关键词渲染,从而过滤掉大量的文本信息,使读者只要一眼扫过文本就可以领略文本的主旨. 词云用Python是怎么实现的.用wordc ...

  4. python集群_使用Python集群文档

    python集群 Natural Language Processing has made huge advancements in the last years. Currently, variou ...

  5. python 网页编程_通过Python编程检索网页

    python 网页编程 The internet and the World Wide Web (WWW), is probably the most prominent source of info ...

  6. python机器学习预测_使用Python和机器学习预测未来的股市趋势

    python机器学习预测 Note from Towards Data Science's editors: While we allow independent authors to publish ...

  7. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

  8. python 免费空间_用python做大数据

    不学Python迟早会被淘汰?Python真有这么好的前景? 最近几年Python编程语言在国内引起不小的轰动,有超越Java之势,本来在美国这个编程语言就是最火的,应用的非常非常的广泛,而Pytho ...

  9. python希腊字母字符串_#10 Python字符串

    前言 通过上一节可知,Python6个序列的内置类型中,最常见的是列表和元组,但在Python中,最常用的数据类型却不是列表和元组,而是字符串.要想深入了解字符串,必须先掌握字符编码问题.因此本篇博文 ...

最新文章

  1. python linux编程与window编程_Python实现Windows和Linux之间互相传输文件(文件夹)的方法...
  2. 创建型模式——Factory Method(未完)
  3. JSP装状态管理 session cookie
  4. Hibernate最佳实践
  5. 【Flutter】Image 组件 ( 配置本地 gif 图片资源 | 本地资源加载 placeholder )
  6. python 常量_大疆机甲大师Python开发: 两只老虎
  7. 解决webpack打包后-webkit-box-orient: vertical ;消失问题
  8. php 删除硬链接,为什么要用软链接硬链接
  9. SAP HANA解读-2012 SAP商业同略会分享
  10. 深度学习(2)--常见概率分布(1)
  11. Try Redis : Redis 入门教程
  12. DOM方式操作元素属性
  13. 傅里叶分析——傅里叶级数
  14. JS移动DOM节点,将某节点下所有子节点移动(剪切)到另一个节点下。新手很容易踩的坑!
  15. 从招聘网站分析大数据相关职位现状
  16. python-Selenium
  17. MT【325】垂心的向量形式
  18. HDU - 1431 素数回文 [ 学到了 ]
  19. 【Python 跟书学习笔记】
  20. 我对读计算机软件专业硕士的几点看法

热门文章

  1. zephyr 测试框架
  2. string 相等 java_java中string相等问题(==与.equal的具体区别。求详细解释)
  3. 理想内插_理想ONE性能测试:6.35秒就能破百,售价只要宝马X5一半
  4. 新闻与传播c刊_新闻传播类c刊有哪些
  5. python读取nc文件并转换成csv_python3使用类型转换读取csv文件
  6. MySQL中的char和varchar类型
  7. java 布局教程_java布局学习(新)
  8. JAVA 之异常处理与IO流
  9. 鸿蒙公测报名表填写,鸿蒙公测第二期报名公测版_华为鸿蒙os2.0第二期报名申请内测版 - 风云下载...
  10. java set 包含_关于Java的Set的集合是否包括问题,如下为什么不包括?