python——数据库编程
paramiko
paramiko是基于python实现的ssh2远程安全连接,支持认证及密钥方式。可以实现远程命令执行、文件传输、中间ssh代理等功能。
paramiko包含两个核心组件:SSHClient和SFTPClient
SHHClient
它是ssh服务会话的高级表示,该类封装了传输(transport)、通道(channel)及SFTPClient的校验、建立的方法,通常用于执行远程命令,下面是个例子:
import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname='192.168.10.20', port=22, username='test', password='123') # 执行命令 stdin, stdout, stderr = ssh.exec_command('pwd') # 获取命令结果 result = stdout.read() print(str(result,encoding='utf8')) # 关闭连接 ssh.close() 执行结果: /home/test/
下面介绍它的几种常用方法
connect方法
connect方法实现了ssh连接并校验
参数有:
hostname:主机地址
port:端口,默认22
username:登录用户名
password:密码
pkey:私钥方式用于身份验证
timeout:一个可选的超时时间的TCP连接
allow_agent:设置为False时用于禁止连接到ssh代理
compress:设置为True时打开压缩。
exec_command方法
远程命令执行方法,该命令的输入输出流为标准输入(stdin)、输出(stdout)、错误(stderr)的python文件对象。
参数:command:执行命令
bufsize:文件缓存区大小,默认为-1(不限制)
load_system_host_keys方法
加载本地公钥校验文件,默认为~/.ssh/known_hosts,飞默认路径需要手动指定
参数:filename:指定的远程主机公钥记录文件。
set_missing_host_key_policy方法
设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种,分别是AutoAddPolicy、RejectPolicy、WarningPolicy,仅限用于SSHClient类,分别代表的含义如下:
AutoAddPolicy,自动添加主机名及主机密钥到本地HostKeys对象,并将其保存,不依赖load_system_host_keys()的配置,即使~/.ssh/know_hosts不存在也不产生影响
RejectPolicy,自动拒绝位置的主机名和密钥,依赖load_system_host_keys()的配置
WarningPolicy,用于记录一个位置的主机密钥的Python的警告,并接受它,功能上与AutoAddPolicy相似,但未知主机会有告警
SFTPClient类
SFTPClient作为一个SFTP客户端对象,根据SSH传输协议的sftp会话,实现远程文件操作,比如文件上传、下载、权限、状态等操作,
import paramiko transport = paramiko.Transport(('127.0.0.1',17181)) transport.connect(username='tecom',password='pHgyZvyX43mdrJVJ') sftp = paramiko.SFTPClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py # sftp.put('/tmp/location.py', '/tmp/test.py') # 将remove_path 下载到本地 local_path sftp.get(r'/home/tecom/1.txt', r'C:/Users/admin/Desktop/oldboy/1.txt') transport.close()
下面介绍SFTPClient的常用方法。
from_transport方法
创建一个已连通的SFTP客户端通道
参数说明:t(transport),一个已通过验证的传输对象。
put方法
上传本地文件到远程SFTP服务端
参数说明:localpath:str类型,上传的本地文件全路径(源)
remotepath:str类型,远程文件全路径(目标)
callback:获取已接收的字节数及总传输字节数,以便毁掉函数调用,默认为None
confirm(bool):文件上传完毕i后是否调用stat()方法,以便确认文件大小
get方法
从远程SFTP服务端下载到本地。
参数:remotepath,远程路径(源)
localpath,本地路径(目标)
其他方法
SFTPClient类其他常用方法
mkdir:在SFTP服务器端创建目录,如sftp.mkdir('/home/test',0755)
remove:删除SFTP服务器端指定目录,如sftp.remove('/home/test')
rename:重命名SFTP服务器端文件或目录,如sftp.rename('/home/test.sh','/home/test1.sh')
stat:获取SFTP服务器端指定文件信息,如sft.stat('/home/testfile.sh')
listdir:获取远程SFTP服务器端指定目录信息,以Python的列表(list)形式返回,如,sftp.listdir('/home')