python paramiko_Python2.7 paramiko模块_weixin_39949386的博客-程序员宝宝

技术标签: python paramiko  

之前用过fabric模块通过ssh来传输文件,知道fabric是封装了paramiko模块来实现该功能的,而官方对paramiko的介绍就是:Python SSH module。

一般使用paramiko的功能就是通过ssh远程执行命令,远程传输文件等等。

模拟远程执行命令:

import paramiko

#设置日志记录

paramiko.util.log_to_file('/tmp/test')

#建立连接

ssh=paramiko.SSHClient()

#缺失host_knows时的处理方法

ssh.load_system_host_keys()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#连接远程客户机器

ssh.connect('10.1.6.190',port=22,username='root',password='password',compress=True)

#获取远程命令执行结果

stdin, stdout, stderr = ssh.exec_command('hostname;uptime')

print stdout.read()

#输出执行结果

ssh.close()   执行结果如下:

模拟远程文件传输:

import paramiko

#建立一个加密的管道

scp=paramiko.Transport(('10.1.6.190',22))

#建立连接

scp.connect(username='root',password='password')

#建立一个sftp客户端对象,通过ssh transport操作远程文件

sftp=paramiko.SFTPClient.from_transport(scp)

#Copy a remote file (remotepath) from the SFTP server to the local host

sftp.get('/root/debian7','/tmp/debian7')

#Copy a local file (localpath) to the SFTP server as remotepath

sftp.put('/root/crash-6.1.6.tar.gz','/tmp/crash-6.1.6.tar.gz')

scp.close()     以上都是通过

paramiko模块来远程操作服务器,如果想通过paramiko模块直接用ssh协议登陆到远程服务器怎么办呢?如下:

import paramiko

import interactive

#记录日志

paramiko.util.log_to_file('/tmp/test')

#建立ssh连接

ssh=paramiko.SSHClient()

ssh.load_system_host_keys()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('10.1.6.190',port=22,username='root',password='xxxxxx',compress=True)

#建立交互式shell连接

channel=ssh.invoke_shell()

#建立交互式管道

interactive.interactive_shell(channel)

#关闭连接

channel.close()

ssh.close() 执行结果如下:

interactive模块内容如下:

import socket

import sys

# windows does not have termios...

try:

import termios

import tty

has_termios = True

except ImportError:

has_termios = False

def interactive_shell(chan):

if has_termios:

posix_shell(chan)

else:

windows_shell(chan)

def posix_shell(chan):

import select

oldtty = termios.tcgetattr(sys.stdin)

try:

tty.setraw(sys.stdin.fileno())

tty.setcbreak(sys.stdin.fileno())

chan.settimeout(0.0)

while True:

r, w, e = select.select([chan, sys.stdin], [], [])

if chan in r:

try:

x = chan.recv(1024)

if len(x) == 0:

print '\r\n*** EOF\r\n',

break

sys.stdout.write(x)

sys.stdout.flush()

except socket.timeout:

pass

if sys.stdin in r:

x = sys.stdin.read(1)

if len(x) == 0:

break

chan.send(x)

finally:

termios.tcsetattr(sys.stdin, termios.TCSADRAIN, oldtty)

# thanks to Mike Looijmans for this code

def windows_shell(chan):

import threading

sys.stdout.write("Line-buffered terminal emulation. Press F6 or ^Z to send EOF.\r\n\r\n")

def writeall(sock):

while True:

data = sock.recv(256)

if not data:

sys.stdout.write('\r\n*** EOF ***\r\n\r\n')

sys.stdout.flush()

break

sys.stdout.write(data)

sys.stdout.flush()

writer = threading.Thread(target=writeall, args=(chan,))

writer.start()

try:

while True:

d = sys.stdin.read(1)

if not d:

break

chan.send(d)

except EOFError:

# user hit ^Z or F6

pass

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

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

setproctitle 该模块可以让你设置进程的标题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39949386/article/details/110761014

智能推荐

JAVA运算符之 ++_kriswu_sweetgirl的博客-程序员宝宝

自加是一个单目运算符分为:前置++(a++),和后置++(++a),通常用在赋值语句中。

最新Google 15道古怪面试题_fpga和matlab的博客-程序员宝宝

Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道。这个话题已经探讨过很多次,而科技博客BusinessInsider这两天先是贴出15道Google面试题并一一给出了答案,其中不少都是流传很广的,因此让人感到不过瘾,不少人兴奋地表示“让难题来得更猛烈吧!”,于是今天又出了续篇,再次贴出了另外15道Google的面试题,但却没有给出答案。怎么样?下边先来热热身,再来看看你有没有可能去Google工作吧!第一题:多少只高尔夫球才能填满一辆校车?(职位:产品经理)解析:通过这道题,

VS Code 开发asp.net.web.API,C#后端开发_Guistar~~的博客-程序员宝宝_vscode开发web项目c#

ASP.NET Core 创建最小 Web API官网创建教程创建方式1流程创建方式2流程EFcoreCentOS 8 安装 docker官网创建教程网站链接创建方式1流程桌面创建文件夹,用Visual Studio Code打开打开集成终端。运行以下命令:TodoAPI为项目名称dotnet new webapi -minimal -o TodoApicd TodoApicode -r ../TodoApi通过运行以下命令来信任 HTTPS 开发证书dotnet dev-.

强制类型转换和隐式类型转换简单列举_许魁的博客-程序员宝宝_强制类型转换和隐式

强制转换:parselnt;parseFloat;Number();隐式转换:+string:可以转换为数字;a+" " :可以转换为字符串;!var :可以转换为布尔值。

Servlet3.0之八:基于Servlet3.0的文件上传@MultipartConfig_weixin_30865427的博客-程序员宝宝

在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了。@MultipartConfig该注解主要是为了辅助 Servlet 3.0 中 HttpServ...

win7 64位 wamp安装memcache_denialyii的博客-程序员宝宝_win7 64位 wamp

转http://blog.csdn.net/kun_php/article/details/7979287如果按照下述方法安装好后仍无法使用memcache,请安装这个版本里面的wamp:http://www.wampserver.com/#download-wrappeWAMPSERVER (64 BITS & PHP 5.3) 2.2E我是安装了以上的w

随便推点

ROS笔记十(基于Python、Kinetic):rviz基础——快速配置并渲染点云和摄像机图像数据_进击的香皂的博客-程序员宝宝_python rviz

前言:rviz(ROS visualization):用于机器人、传感器和算法的通用3D可视化系统。rviz能够绘制多种类型的数据流。特别是三维的数据。在ROS中所有类型的数据都被关联到一个参考坐标系上。1.准备工作:本文以上一个笔记遥控操作turtlebot为例子,准备工作:打开四个终端:一个运行roscore:roscore一个运行键盘驱动:rosrun teleopbot key_publisher.py 一个运行keys_to_teleop_with_rate.py.

python写算法竞赛_三、如何科学地做到:算法竞赛从入门到放弃/算法竞赛从了解入坑到快速放弃指南?..._weixin_39940425的博客-程序员宝宝

搬运自知乎 https://zhuanlan.zhihu.com/p/29598587相关标题大学僧算法竞赛简介及入坑指南大学生acm-icpc算法竞赛入坑指北算法竞赛从C语言入坑到转Java开发大学算法竞赛两年入坑总结大学生搞算法竞赛的入坑大纲、刷题心态、前途、¥途、刷题心态笔者在某二本大学, 曾入坑学校集训队两年,当过一年助教,带过一年的集训队管理,给新生和新集训队成员带过课;目前已退役,转j...

Android开发实践:Java层与Jni层的数组传递_hjwang1的博客-程序员宝宝

转自:http://ticktick.blog.51cto.com/823160/1360240Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层。我简单地总结了一下,从Java层到J

React中的CSS——styled-components_小小白学计算机的博客-程序员宝宝

一、认识CSS in JS实际上,官方文档也有提到过CSS in JS这种方案:https://zh-hans.reactjs.org/docs/faq-styling.html“CSS-in-JS” 是指一种模式,其中 CSS 由 JavaScript 生成而不是在外部文件中定义;注意此功能并不是 React 的一部分,而是由第三方库提供。 React 对样式如何定义并没有明确态度;在传统的前端开发中,我们通常会将结构(HTML)、样式(CSS)、逻辑(JavaScript)进行分离。

Instant DateTimeFormatter的使用_宅塔k的博客-程序员宝宝

@Test public void InstantTest(){ Instant instant = Instant.now(); System.out.println(instant);//本初子午线时间 //添加时间的偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(of.

iOS自动订阅商品(Auto-Renewable Subscriptions)相关处理_xyxjn的博客-程序员宝宝_ios自动订阅商品回调参数

自动订阅商品在订阅过程及订阅完成后的有效期内,均可理解为非消费品,其支付过程及恢复流程(这里特指苹果自身的恢复流程)均和非消费品相同。 目前主要有如下几个问题需要注意:1、订阅到期的处理2、用户手动篡改时间的预防机制。。。。

推荐文章

热门文章

相关标签