python的paramiko模块

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-10-27 10:58:16

python的paramiko模块的相关文章

Python之paramiko模块和SQL连接API

堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.con

使用python的Paramiko模块登陆SSH

paramiko是用Python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. python的paramiko模块可以方便的实现ssh登录,并执行命令. 1. paramiko模块安装 1.1安装pycrypto库 下载地址请戳这里:http://download.csdn.net/detail/oatnehc/8825715: pycrypto库的主页在这里:https://www.dlitz.net/software/pycrypto/ pycrypto库

Python中paramiko模块在linux运维中应用

python的paramiko模块可以实现ssh客户端的功能,使用起来也比较简单.但是当服务器非常多的时候,每台服务器上执行完全相同的简单操作,也会花费大量的时间. 下载模块:paramiko.tar.gz使用tar解压后在cd到目录下最后使用rpm安装 rpm -ivh * import paramiko //导入paramiko模块host='192.168.x.xx' //需要远程管理的主机ip ssh=paramiko.SSHClient() //相当于点开xshellssh.set_m

python之paramiko模块

python paramiko模块 1.安装 1225 ./configure #在解压后的python2.7.9的目录下 1226 make 1227 make install 1228 cd /usr/local/ 1229 ls 1230 cd bin 1231 ls 1232 ./python 1233 python 1234 cd /usr/bin 1235 ls 1236 ll python* 1237 mv ./python ./python26 1238 ln -s /usr/l

python的paramiko模块报错解决办法

写了一个Python脚本内容如下: #-*- coding:utf-8 -*- __author__ = 'kai' import paramiko import sys,os host = sys.argv[1] user = 'zk' password = '123' cmd = sys.argv[2] s = paramiko.SSHClient()        #绑定实例 s.load_system_host_keys()       #加载本机HOST主机文件 s.set_missi

Python 之paramiko 模块

一. 简介 paramiko 是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClient,即一个远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作 二. 使用 1. 下载安装 #安装pipwget --no-check-certificate https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447

windows下python安装paramiko模块和pycrypto模块(简单三步)

前言 Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypto模块,因此要在python中使用SSH,我们需要先安装pycrypto模块,然后再安装paramiko模块.下面话不多说了,来一起看看详细的介绍: 安装方法 1>首先要确保python安装好,且环境变量设置好.(关于python的安装,本文不再赘述.) 2>安装pycrypto: 到下面这个网站下载编译好的pycrypto(也可以自己到官网下载pycr

Python 之Paramiko模块

介绍 paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClinet,即一个是远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实. 安装 Paramiko模块内部依赖pycrypto,所以先下载安装pycrypto,再安装Paramiko 模块使用 SSHClient: 远程连接分为两种:(1)基于用户名密码连接 (2)基于公钥秘钥连接

Python学习—paramiko模块实现简单的ssh与sftp

paramiko模块 paramiko模块提供了ssh及sft进行远程登录服务器执行命令和上传下载文件的功能.这是一个第三方的软件包,使用之前需要安装. import paramiko # ssh [email protected] # 创建一个ssh对象 client = paramiko.SSHClient() #如果第一次连接陌生的IP,自动选择yes确认连接 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接