python模块之paramiko

paramiko 是基于python实现的ssh2远程安全连接,支持密码和key认证,可以实现远程命令执行 文件传输等功能

1.安装paramiko

pip install paramiko

2.核心组件

paramiko包含两个核心组件,sshclient用于执行命令,sftpclient用于传输文件

SSHClient类

该类封装了传输 transport 通道channel 及SFTPclient的校验建立方法,通常用于执行远程命令

1.connect方法 实现连接并校验

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

hostname定义目标主机

port定义目标端口

username定义目标用户名

password定义目标密码

pkey定义私钥

key_filename 文件 用于私钥的身份验证

timeout 超时时间

look_for_keys 设置为False 禁用在.ssh中搜索私钥文件

compress 设置为True打开压缩

2.exec_command方法

该命令输入输出流为标准输入stdin 输出stdout,错误stderr

exec_command(self,command,bufsize=-1)

command 定义命令

bufsize 定义文件缓存大小 默认-1不限制

3.load_system_host_keys方法

加载本地弓腰校验,默认为~/.ssh/known_hosts

load_system_host_keys(self,filename=None)

filename 指定远程主机公钥文件

4.set_missing_host_key_policy方法

设置连接的远程主机没有本地主机秘钥时的策略,支持三种 AutoAddPolicy RejectPolicy WaringPolicy 仅限用于SSHClient类,

AutoAddPolicy 自动添加主机秘钥到本地HostKeys对象,并保存

RejectPolicy 自动拒绝未知的主机名和密钥

WaringPolicy 记录一个未知的主机密钥的python警告,并接受 功能与AutoAddPolicy相似 但会警告

ssh = paramiko。SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)

SFTPClient 类

作为一个SFTP客户端对象 实现远程文件的操作,例如上传 下载 权限 状态等操作

1. from_transport方法

创建一个已连通的SFTP客户端通道

from_transport(cls,t)

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

t= paramiko.Transport(“192.168.1.1″,22)

t.connect(username=”root”,password=”123456″)

sftp = paramiko.SFTPClient.from_transport(t)

2.put方法

上传本地文件到远程SFTP服务端

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

localpath 定义本地路径

remote 定义远程目标路径

callback 获取已接受的字节数和总传输字节数 默认None

confirm 文件上传后是否调用start()方法,以确认文件的大小

sftp.put(localpath,remotepath)

3.get方法

从远程SFTP服务器下载文件到本地

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

remotepath为要下载的远程文件

localpath 为本地路径

callback 获取已接受的字节数及总传输字节数

sftp,get(remotepath,localpath)

4.其他方法

Mkdir 用于在远程创建目录 sftp.njdur(“/tmp/aaa”,0755)

remove 用于删除远程目录 sftp.remove(“/tmp/aaa”)

rename 重命名远程目录 sftp.rename(“/tmp/aaa”,”/tmp/bbb”)

stat 获取文件信息 sftp.stat(“/root/a.sh”)

listdir 获取目录列表 sftp.listdir(“/root”)

案例

执行命令

import paramiko

private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('主机名 ', 端口, '用户名', key)

stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()
ssh.close()

上传下载文件

import paramiko

pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='root',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py')

t.close()

import paramiko

pravie_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)

t = paramiko.Transport(('182.92.219.86',22))
t.connect(username='root',pkey=key)

sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/test3.py','/tmp/test4.py')

t.close()

python模块之paramiko
http://www.jcwit.com/article/347/
作者
Carlos
发布于
2018年12月17日
许可协议