使用python paramiko模块实现ssh与scp功能
来源:互联网 发布:人人店骗局知乎 编辑:程序博客网 时间:2024/05/23 11:35
介绍
这篇文章简单地介绍了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的多线程,并发地对多台远程计算机执行相同的操作。
安装
安装非常简单,直接使用pip安装即可:
pip instal paramiko
建立SSH连接
使用密码连接:
import paramikossh = 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]:(<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=2097152 -> <paramiko.Transport at 0x377c690L (cipher aes128-ctr, 128 bits) (active; 2 open channel(s))>>>,<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=2097152 -> <paramiko.Transport at 0x377c690L (cipher aes128-ctr, 128 bits) (active; 2 open channel(s))>>>,<paramiko.ChannelFile from <paramiko.Channel 1 (open) window=2097152 -> <paramiko.Transport at 0x377c690L (cipher aes128-ctr, 128 bits) (active; 2 open channel(s))>>>)
执行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()[]
API文档: https://paramiko-docs.readthedocs.org/en/1.15/api/client.html
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]: <SFTPAttributes: [ size=288 uid=1000 gid=1000 mode=0100644 atime=1435391914 mtime=1435391914 ]>
文件下载
In [60]: sftp.get('memory.py', 'backup.py')
执行命令
paramiko并没有提供一个叫做scp的子模块,如果我们希望在计算机之间传输数据,可以通过sftp(sftp实现了scp所有的功能,也就没有必再实现一个scp)传输文件,还可以通过sftp执行命令,如下所示:
In [44]: sftp.listdir()In [45]: sftp.rename('AgentBackkup_2015-06-10', 'AgentBackkup_2015-06-11')In [46]: sftp.listdir()
sftp提供了很多命令,具体内容可以参考官方文档 。
转载自:使用python的paramiko模块实现ssh与scp功能
- 使用python paramiko模块实现ssh与scp功能
- 转 -- 使用python的paramiko模块实现ssh与scp功能
- python模块paramiko与ssh
- python模块paramiko与ssh
- python使用paramiko模块实现ssh登录执行命令
- python paramiko模块实现ssh远程控制
- python ssh模块paramiko
- 使用python的Paramiko模块登陆SSH
- Python 模块功能paramiko SSH 远程执行及远程下载(可以使用)
- python模块paramiko与ssh安装配置教程
- windows下python SSH的使用——paramiko模块
- python SSH模块 paramiko的学习和使用
- python paramiko模块使用介绍
- Python Paramiko模块的使用
- Python paramiko模块之SSH SFTP
- Python使用Paramiko模块实现远程文件拷贝
- python的paramiko模块的安装与使用
- 【python】python paramiko模块安装和使用
- 在VirtualBox给安装好CentOS添加新硬盘
- 数据库
- 通过jsp的URL进行参数传递的时候出现参数为空的情况
- 帧布局(FrameLayout)及属性
- Android TV listView焦点平滑移动
- 使用python paramiko模块实现ssh与scp功能
- BZOJ 1050 [HAOI2006]旅行comf CODEVS 1001 舒适的路线 并查集
- adb shell top用法
- Android 使用线程池处理异步任务
- 稀疏表示字典的显示(MATLAB实现代码)
- 1216: [HNOI2003]操作系统
- ServletContext
- android屏幕适配
- 函数不能嵌套定义http://blog.csdn.net/douyuhua0918/article/details/7452915