技术标签: 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 该模块可以让你设置进程的标题
自加是一个单目运算符分为:前置++(a++),和后置++(++a),通常用在赋值语句中。
Google的面试题在刁钻古怪方面相当出名,甚至已经有些被神化的味道。这个话题已经探讨过很多次,而科技博客BusinessInsider这两天先是贴出15道Google面试题并一一给出了答案,其中不少都是流传很广的,因此让人感到不过瘾,不少人兴奋地表示“让难题来得更猛烈吧!”,于是今天又出了续篇,再次贴出了另外15道Google的面试题,但却没有给出答案。怎么样?下边先来热热身,再来看看你有没有可能去Google工作吧!第一题:多少只高尔夫球才能填满一辆校车?(职位:产品经理)解析:通过这道题,
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 :可以转换为布尔值。
在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了。@MultipartConfig该注解主要是为了辅助 Servlet 3.0 中 HttpServ...
转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
前言:rviz(ROS visualization):用于机器人、传感器和算法的通用3D可视化系统。rviz能够绘制多种类型的数据流。特别是三维的数据。在ROS中所有类型的数据都被关联到一个参考坐标系上。1.准备工作:本文以上一个笔记遥控操作turtlebot为例子,准备工作:打开四个终端:一个运行roscore:roscore一个运行键盘驱动:rosrun teleopbot key_publisher.py 一个运行keys_to_teleop_with_rate.py.
搬运自知乎 https://zhuanlan.zhihu.com/p/29598587相关标题大学僧算法竞赛简介及入坑指南大学生acm-icpc算法竞赛入坑指北算法竞赛从C语言入坑到转Java开发大学算法竞赛两年入坑总结大学生搞算法竞赛的入坑大纲、刷题心态、前途、¥途、刷题心态笔者在某二本大学, 曾入坑学校集训队两年,当过一年助教,带过一年的集训队管理,给新生和新集训队成员带过课;目前已退役,转j...
转自:http://ticktick.blog.51cto.com/823160/1360240Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni层也需要把从Socket接收到的数据流返回给Java层。我简单地总结了一下,从Java层到J
一、认识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)进行分离。
@Test public void InstantTest(){ Instant instant = Instant.now(); System.out.println(instant);//本初子午线时间 //添加时间的偏移量 OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); System.out.println(of.
自动订阅商品在订阅过程及订阅完成后的有效期内,均可理解为非消费品,其支付过程及恢复流程(这里特指苹果自身的恢复流程)均和非消费品相同。 目前主要有如下几个问题需要注意:1、订阅到期的处理2、用户手动篡改时间的预防机制。。。。