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=None,password=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()