python的paramiko模块实现远程控制和传输示例


Posted in Python onOctober 13, 2017

本文介绍了python的paramiko模块实现远程控制和传输示例,分享给大家,具体如下:

1 安装

sudo pip install paramiko

2 ssh实现远程控制

#LINUX下执行shell
ssh username@ip #输入密码后就可以对远程机器进行操作
ssh username@ip command #输入密码后远程机器就执行command

ssh运行后,想退出,可以kill掉ssh进程。

3 paramiko实现ssh

import paramiko
hostname = '10.1.111.111'
username = 'root'
password = '111111'
port = 22 #整数不是字符串
paramiko.util.log_to_file('paramiko.log')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_hosts文件中的主机
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("ls") #远程执行shell命令
print(stdout.readlines()) #输出回显结果
ssh.close()

exec_command命令,以分号;分隔表示先后执行两个命令;可以传入多个参数; exec_command为单个会话,执行完成之后会回到登录时的缺省目录,如下:

a='~/Videos'
b='aaa'
ssh.exec_command('cd %s;mkdir %s'%(a,b)) #aaa在a目录下
ssh.exec_command('mkdir aaa') #aaa在缺省目录下

远端执行命令时如果有交互,可以这样用 stdin.write(“”)来完成。

注意:

(1)sudo后要加-S,表示从stdin接收密码;

(2)stdin.write(‘password\n')最后要加\n作为命令的结束,否则服务器一直等待;

(3) flush()写入的缓冲( flush() any buffer you're writing to )

stdin, stdout, stderr = ssh.exec_command('sudo -S ls')
stdin.write('password\n')
stdin.flush()

可以利用多进程或线程可以批量执行命令:

import paramiko
import threading

def ssh_cmd(ip,port,username,passwd,cmd):
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  ssh.connect(ip,port,username,passwd)
  for m in cmd:
    stdin, stdout, stderr = ssh.exec_command(m)
    print(stdout.readlines()) 
  ssh.close()

if __name__=='__main__':
  cmd = ['ls','ifconfig']   
  a=threading.Thread(target=ssh_cmd,args=(ip,port,username,passwd,cmd))
  a.start() 
  a.join()

4 远程传输文件

scp从本地服务器复制到远程服务器

scp local_file remote_username@remote_ip:remote_file

指定了用户名,命令执行后需要输入用户密码;如果不指定用户名,命令执行后需要输入用户名和密码; 从远处复制文件到本地

scp remote_username@remote_ip:remote_file local_file

5 paramiko实现远程传输文件

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

上传:

sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
#sftp = ssh.open_sftp() #两者选其一即可
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.close()

或者以下实现文件上传和下载:

import paramiko
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t) 
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.get('m.py', 'mm.py')#文件下载并重命名
t.close()

官方文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之重回函数
Oct 10 Python
python requests 使用快速入门
Aug 31 Python
python实现数据库跨服务器迁移
Apr 12 Python
Python编程深度学习计算库之numpy
Dec 28 Python
python 命令行传入参数实现解析
Aug 30 Python
Python基础之函数基本用法与进阶详解
Jan 02 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
python中什么是面向对象
Jun 11 Python
Django --Xadmin 判断登录者身份实例
Jul 03 Python
python如何随机生成高强度密码
Aug 19 Python
python实现求纯色彩图像的边框
Apr 08 Python
Python编解码问题及文本文件处理方法详解
Jun 20 Python
基于python(urlparse)模板的使用方法总结
Oct 13 #Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 #Python
Python中的浮点数原理与运算分析
Oct 12 #Python
python中获得当前目录和上级目录的实现方法
Oct 12 #Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 #Python
Python调用C# Com dll组件实战教程
Oct 12 #Python
python 实现一个贴吧图片爬虫的示例
Oct 12 #Python
You might like
PHP手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php获取apk包信息的方法
2014/08/15 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
2016/04/11 PHP
tp5递归 无限级分类详解
2019/10/18 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
js判断屏幕分辨率的代码
2013/07/16 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
angularJs复选框checkbox选中进行ng-show显示隐藏的方法
2018/10/08 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
vue实现图片上传功能
2020/05/28 Javascript
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
gearman的安装启动及python API使用实例
2014/07/08 Python
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
Python urllib2运行过程原理解析
2020/06/04 Python
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
大型活动组织方案
2014/05/10 职场文书
幼儿园见习报告
2014/10/30 职场文书
财务部岗位职责
2015/02/03 职场文书
置业顾问岗位职责
2015/02/09 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
2016年寒假见闻
2015/10/10 职场文书
导游词之昭君岛
2020/01/17 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript