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多线程用法实例详解
Jan 15 Python
Python比较文件夹比另一同名文件夹多出的文件并复制出来的方法
Mar 05 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Scrapy的简单使用教程
Oct 24 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
Python UnboundLocalError和NameError错误根源案例解析
Oct 31 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
Python实现i人事自动打卡的示例代码
Jan 09 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
May 27 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版自动生成文章摘要
2008/07/23 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
php 删除cookie方法详解
2014/12/01 PHP
php获取一定范围内取N个不重复的随机数
2016/05/28 PHP
jQuery 连续列表实现代码
2009/12/21 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
比较不错的JS/JQuery显示或隐藏文本的方法
2014/02/13 Javascript
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
利用node.js搭建简单web服务器的方法教程
2017/02/20 Javascript
Node.js 实现简单的接口服务器的实例代码
2017/05/23 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
微信跳一跳python辅助脚本(总结)
2018/01/11 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
python列表返回重复数据的下标
2020/02/10 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
英国航空官网:British Airways
2016/09/11 全球购物
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
什么是数组名
2012/05/10 面试题
师范毕业生自荐信
2013/10/17 职场文书
测绘专业大学生职业生涯规划书
2014/02/10 职场文书
《美丽的黄昏》教学反思
2014/02/28 职场文书
初中军训感想300字
2014/03/05 职场文书
保险公司早会主持词
2014/03/22 职场文书
安全目标管理责任书
2014/07/25 职场文书
我爱我班主题班会
2015/08/13 职场文书
2016继续教育研修日志
2015/11/13 职场文书
医学会议开幕词
2016/03/03 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server