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')

 

posted @ 2016-07-30 09:38  fukuda  阅读(203)  评论(0编辑  收藏  举报