五、python远程执行操作的其他开源模块

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

paramiko 遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,可以实现远程文件的上传,下载或通过ssh远程执行命令。

项目地址:https://github.com/paramiko/paramiko

官方文档:http://docs.paramiko.org/

一、安装root@Ubuntu:~/paramiko#pipinstall paramiko

测试是否安装成功

>>>importparamiko>>>

二、上传文件到远程服务器原理:通过SFTPClient类根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作。实现远程文件上传、下载。

任务:10. 1.101.187向10.1.101.186发送文件。

10.1.101.187 目录/root/paramiko 有三个文件 paramikosend.py test test.tar

10.1.101.186 目录/root/paramiko 开始为空文件夹

执行python paramikosend.py,代码如下

root@ubuntu:~/paramiko#cat paramikosend.pyimportparamiko,datetime,os

hostname='10.1.101.186'username='root'passWord='123456'port= 22local_dir='/root/paramiko'remote_dir='/root/paramiko'try:

t=paramiko.Transport((hostname,port))

t.connect(username=username,password=password)

sftp=paramiko.SFTPClient.from_transport(t)

files=os.listdir(local_dir)forfinfiles:

sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))

t.close()exceptException:PRint"connect error!"

结果:

三、从远程服务器下载文件原理:通过SFTPClient类根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作。实现远程文件上传、下载。

任务:现在10.1.101.186的/root/paramiko/temp186目录有两个文件,将其下载到10.1.101.187的/root/paramiko/temp187目录。

执行 python paramikoget.py ,代码如下

root@ubuntu:~/paramiko#cat paramikoget.pyimportparamiko,datetime,os

hostname='10.1.101.186'username='root'password='123456'port= 22local_dir='/root/paramiko/temp187'remote_dir='/root/paramiko/temp186'try:

t=paramiko.Transport((hostname,port))

t.connect(username=username,password=password)

sftp=paramiko.SFTPClient.from_transport(t)

files=sftp.listdir(remote_dir)#这里需要注意,列出远程文件必须使用sftp,而不能用osforfinfiles:

sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))

t.close()exceptException:print"connect error!"

结果:

四、执行命令测试原理:通过SSHClient类执行命令。SSHClient类是SSH服务会话的高级表示,封装了传输、通道以及SFTPClient的校验、建立方法,通常用于执行命令。

任务:通过10.1.101.187连接到10.1.101.186,然后进入目录/root/paramiko,创建一个目录lxy。

执行python paramikocommand.py,代码如下:

root@ubuntu:~/paramiko#cat paramikocommand.py#!/usr/bin/pythonimportparamiko

hostname='10.1.101.186'username='root'password='123456'port= 22ssh=paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=hostname,port=port,username=username,password=password)

stdin, stdout, stderr= ssh.exec_command("cd /root/paramiko;mkdir lxy")printstdout.readlines()

ssh.close()

结果:

命令中也可以带参数:

root@ubuntu:~/paramiko#cat paramikocommand.py#!/usr/bin/pythonimportparamiko

hostname='10.1.101.186'username='root'password='123456'port= 22name='testcmd'ssh=paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname=hostname,port=port,username=username,password=password)

stdin, stdout, stderr= ssh.exec_command("cd /root/paramiko;mkdir %s"%name)printstdout.readlines()

ssh.close()

Note:exec_command为单个会话,执行完成之后会回到登录时的缺省目录。

比如执行下面两句。

stdin, stdout, stderr = ssh.exec_command("cd /root/paramiko;mkdir %s"%name)

stdin,stdout,stderr= ssh.exec_command('mkdir haha')

haha目录最终是在缺省的/root目录下新建的,而不是/root/paramiko目录。

五、python远程执行操作的其他开源模块fabric:fabric是封装了paramiko模块来实现ssh来传输文件的。

pexpect:也可以实现ssh 登录到某个用户指定的主机上,运行某个用户指定的命令

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:http://www.cnblogs.com/starof/p/4670433.html有问题欢迎与我讨论,共同进步。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航