python中的paramiko模块

python的paramiko模块

此文章转载于https://www.cnblogs.com/breezey/p/6663546.html,如有侵权,请联系。

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。

paramiko常用的类与方法:

1、SSHClient类

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

1)connect方法

connect(self,hostname,port=22,username=None,password=None,pkey=None,key_filename=None,timeout=None,allow_agent=True,look_for_keys=True,compress=False)

参数说明:

hostname:连接目标的主机地址

port:连接目录的端口,默认为22

username:用户名

password:密码

pkey:私钥方式用户验证

key_filename:私钥文件名

timeout:连接超时时间

allow_agent:是否允许使用ssh代理

look_for_keys:是否允许搜索私钥文件

compress:打开时是否压缩

2)exec_command方法

exec_command(self,command,bufsize=-1)

参数说明:

command:执行的的指令

bufsize:文件缓冲区大小,-1不限制

3)load_system_host_keys方法

load_system_host_keys(self,filename=None)

参数说明:

filename:指定远程主机的公钥文件,默认为.ssh目录下的known_hosts文件

4)set_missing_host_key_policy方法

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

参数说明:

AutoAddPolicy:自动添加主机名及密钥到本地并保存,不依赖load_system_host_keys()配置,即如果known_hosts里没有远程主机的公钥时,默认连接会提示yes/no,自动yes

RejectPolicy:自动拒绝未知主机名和密钥,依赖load_system_host_keys()

WarnningPlicy:功能与AutoAddPolicy相同,但是未知主机会提示yes/no

2、SFTPClient类

根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作。

1)from_transport方法

classmethod from_transport(cls,t)

参数说明:

t:一个已通过验证的传输对象

示例:

>>> import paramiko
>>> a = paramiko.Transport((“127.0.0.1″,2222))
>>> a.connect(username=”root”, password=’123456′)
>>> sftp = paramiko.SFTPClient.from_transport(a)

2)put方法

put(self,localpath,remotepath,callback=None,confirm=True)

参数说明:

localpath:上传源文件的本地路径

remotepath:目标路径

callback:获取接收与总传输字节数

confirm:上传完毕后是否调用stat()方法,以便确认文件大小

示例:

>>> localpath=’ftp-test.log’
>>> remotepath=’/data/ftp-test.log’
>>> sftp.put(localpath,remotepath)

3)get方法

get(self, remotepath, localpath, callback=None)

参数说明:

remotepath:需要下载的远程文件

localpath:本地存储路径

callback:同put方法

4)其他方法

mkdir:用于创建目录

remove:删除目录

rename:重命名

stat:获取文件信息

listdir:获取目录列表

代码示例

Paramiko ssh客户端:

#!/usr/bin/python
import paramiko
import os,sys
ssh_host = sys.argv[1] ssh_port = 22
user = ‘root‘
password = ‘xxxxxx‘
cmd = sys.argv[2]
paramiko.util.log_to_file(‘/tmp/test‘)    #使用paramiko记录日志
s = paramiko.SSHClient()    #绑定一个实例
s.load_system_host_keys()    #加载known_hosts文件
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())    #远程连接如果提示yes/no时,默认为yes
s.connect(ssh_host,ssh_port,user,password,timeout=5)    #连接远程主机
stdin,stdout,stderr = s.exec_command(cmd)    #执行指令,并将命令本身及命令的执行结果赋值到标准办入、标准输出或者标准错误
cmd_result = stdout.read(),stderr.read()    #取得执行的输出
for line in cmd_result:
  print line
s.close()

使用ssh密钥连接:

pkey_file = ‘/home/breeze/.ssh/id_rsa‘
key = paramiko.RSAKey.from_private_key_file(pkey_file)
s.connect(host,port,username,pkey=key,timeout=5)
stdin,stdout,stderr = s.exec_command(cmd)

Paramiko SFTP传送文件:

#!/usr/bin/python
import os,sys
import paramiko
host = sys.argv[1]
rfilename = sys.argv[2]
lfilename = os.path.basename(rfilename)
user = ‘root‘
password = ‘xxxx‘
paramiko.util.log_to_file(‘/tmp/test‘)
t = paramiko.Transport((host,22))
t.connect(username=user,password=password)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get(rfilename,lfilename)
#sftp.put(‘paramiko1.py‘,‘/tmp/paramiko1.py‘)
t.close()

使用interactive模块实现SSH交互:

interactive.py模块内容如下:

#!/usr/bin/python
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

inter_ssh.py交互脚本如下:

#!/usr/bin/python
#_*_coding:utf8_*_
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(‘192.168.128.82‘,port=22,username=‘root‘,password=‘cheyian‘)
#建立交互式shell连接
channel=ssh.invoke_shell()
#建立交互式管道
interactive.interactive_shell(channel)
#关闭连接
channel.close()
ssh.close()
时间: 2024-07-31 07:27:50

python中的paramiko模块的相关文章

Python中的random模块,来自于Capricorn的实验室

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

python中查看可用模块

1.这种方式的问题是,只列出当前import进上下文的模块. 进入python命令行.输入以下代码: >>>import sys >>>sys.modules 2.在python命令行下输入: >>>help() help>modulespython中查看可用模块,布布扣,bubuko.com

python中动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

Python中的random模块

Python中的random模块 (转载自http://www.cnblogs.com/yd1227/archive/2011/03/18/1988015.html) Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),

解决linux系统下python中的matplotlib模块内的pyplot输出图片不能显示中文的问题

问题: 我在ubuntu14.04下用python中的matplotlib模块内的pyplot输出图片不能显示中文,怎么解决呢? 解决: 1.指定默认编码为UTF-8: 在python代码开头加入如下代码 import sys reload(sys) sys.setdefaultencoding('utf-8') 2.确认你ubuntu系统环境下拥有的中文字体文件: 在终端运行命令"fc-list :lang=zh",得到自己系统的中文字体 命令输出如下: /usr/share/fon

(转)Python中的random模块

Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniform random.uniform的函数原型为:random.uniform(a, b),用于生成一个指定范围内的随机符点数,两个参数其中一个是上限,一个是下限.如果a > b,则生成的随机数n: a <= n <= b.如果 a <

转载:python中的copy模块(浅复制和深复制)

主要是介绍python中的copy模块. copy模块包括创建复合对象(包括列表.元组.字典和用户定义对象的实例)的深浅复制的函数. ########copy(x)########创建新的复合对象并通过引用复制x的成员来创建x的浅复制.更加深层次说,它复制了对象,但对于对象中的元素,依然使用引用.对于内置类型,此函数并不经常使用.而是使用诸如list(x), dict(x), set(x)等调用方式来创建x的浅复制,要知道像这样直接使用类型名显然比使用copy()快很多.但是它们达到的效果是一样

Python中的logging模块【转】

基本用法 下面的代码展示了logging最基本的用法. 1 # -*- coding: utf-8 -*- 2 3 import logging 4 import sys 5 6 # 获取logger实例,如果参数为空则返回root logger 7 logger = logging.getLogger("AppName") 8 9 # 指定logger输出格式 10 formatter = logging.Formatter('%(asctime)s %(levelname)-8s:

Python中的logging模块

http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stackoverflow上查询到的一些内容. 官方文档 技术博客 基本用法 下面的代码展示了logging最基本的用法. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34