- 本书赞誉
- 前言
- 第一部分 基础篇
- 第1章 系统基础信息模块详解
- 第2章 业务服务监控详解
- 第3章 定制业务质量报表详解
- 第4章 Python 与系统安全
- 第二部分 高级篇
- 第5章 系统批量运维管理器 pexpect 详解
- 第6章 系统批量运维管理器 paramiko 详解
- 第7章 系统批量运维管理器Fabric详解
- 第8章 从零开发一个轻量级 WebServer
- 第9章 集中化管理平台 Ansible 详解
- 第10章 集中化管理平台 Saltstack 详解
- 第11章 统一网络控制器 Func 详解
- 第12章 Python 大数据应用详解
- 第三部分 案例篇
- 第13章 从零开始打造 B/S 自动化运维平台
- 第14章 打造 Linux 系统安全审计功能
- 第15章 构建分布式质量监控平台
- 第16章 构建桌面版 C/S 自动化运维平台
6.2 paramiko的核心组件
paramiko包含两个核心组件,一个为SSHClient类,另一个为SFTPClient类,下面详细介绍。
6.2.1 SSHClient类
SSHClient类是SSH服务会话的高级表示,该类封装了传输(transport)、通道(channel)及SFTPClient的校验、建立的方法,通常用于执行远程命令,下面是一个简单的例子:
client = SSHClient client.load_system_host_keys client.connect('ssh.example.com') stdin, stdout, stderr = client.exec_command('ls -l')
下面介绍SSHClient常用的几个方法。
1.connect方法
connect方法实现了远程SSH连接并校验。
方法定义:
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(str类型),连接的目标主机地址;
port(int类型),连接目标主机的端口,默认为22;
username(str类型),校验的用户名(默认为当前的本地用户名);
password(str类型),密码用于身份校验或解锁私钥;
pkey(PKey类型),私钥方式用于身份验证;
key_filename(str or list(str)类型),一个文件名或文件名的列表,用于私钥的身份验证;
timeout(float类型),一个可选的超时时间(以秒为单位)的TCP连接;
allow_agent(bool类型),设置为False时用于禁用连接到SSH代理;
look_for_keys(bool类型),设置为False时用来禁用在~/.ssh中搜索私钥文件;
compress(bool类型),设置为True时打开压缩。
2.exec_command方法
远程命令执行方法,该命令的输入与输出流为标准输入(stdin)、输出(stdout)、错误(stderr)的Python文件对象,方法定义:
exec_command(self, command, bufsize=-1)
参数说明:
command(str类型),执行的命令串;
bufsize(int类型),文件缓冲区大小,默认为–1(不限制)。
3.load_system_host_keys方法
加载本地公钥校验文件,默认为~/.ssh/known_hosts,非默认路径需要手工指定,方法定义:
load_system_host_keys(self, filename=None)
参数说明:
filename(str类型),指定远程主机公钥记录文件。
4.set_missing_host_key_policy方法
设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种,分别是AutoAddPolicy、RejectPolicy(默认)、WarningPolicy,仅限用于SSHClient类,分别代表的含义如下:
AutoAddPolicy,自动添加主机名及主机密钥到本地HostKeys对象,并将其保存,不依赖load_system_host_keys的配置,即使~/.ssh/known_hosts不存在也不产生影响;
RejectPolicy,自动拒绝未知的主机名和密钥,依赖load_system_host_keys的配置;
WarningPolicy,用于记录一个未知的主机密钥的Python警告,并接受它,功能上与AutoAddPolicy相似,但未知主机会有告警。
使用方法如下:
ssh=paramiko.SSHClient ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
6.2.2 SFTPClient类
SFTPClient作为一个SFTP客户端对象,根据SSH传输协议的sftp会话,实现远程文件操作,比如文件上传、下载、权限、状态等操作,下面介绍SFTPClient类的常用方法。
1.from_transport方法
创建一个已连通的SFTP客户端通道,方法定义:
from_transport(cls, t)
参数说明:
t(Transport),一个已通过验证的传输对象。
例子说明:
t = paramiko.Transport(("192.168.1.22",22)) t.connect(username="root", password="KJSdj348g") sftp =paramiko.SFTPClient.from_transport(t)
2.put方法
上传本地文件到远程SFTP服务端,方法定义:
put(self, localpath, remotepath, callback=None, confirm=True)
参数说明:
localpath(str类型),需上传的本地文件(源);
remotepath(str类型),远程路径(目标);
callback(function(int,int)),获取已接收的字节数及总传输字节数,以便回调函数调用,默认为None;
confirm(bool类型),文件上传完毕后是否调用stat方法,以便确认文件的大小。
例子说明:
localpath='/home/access.log' remotepath='/data/logs/access.log' sftp.put(localpath,remotepath)
3.get方法
从远程SFTP服务端下载文件到本地,方法定义:
get(self, remotepath, localpath, callback=None)
参数说明:
remotepath(str类型),需下载的远程文件(源);
localpath(str类型),本地路径(目标);
callback(function(int,int)),获取已接收的字节数及总传输字节数,以便回调函数调用,默认为None。
例子说明:
remotepath='/data/logs/access.log' localpath='/home/access.log' sftp.get(remotepath, localpath)
4.其他方法
SFTPClient类其他常用方法说明:
Mkdir,在SFTP服务器端创建目录,如sftp.mkdir("/home/userdir",0755)。
remove,删除SFTP服务器端指定目录,如sftp.remove("/home/userdir")。
rename,重命名SFTP服务器端文件或目录,如sftp.rename("/home/test.sh","/home/testfile.sh")。
stat,获取远程SFTP服务器端指定文件信息,如sftp.stat("/home/testfile.sh")。
listdir,获取远程SFTP服务器端指定目录列表,以Python的列表(List)形式返回,如sftp.listdir("/home")。
5.SFTPClient类应用示例
下面为SFTPClient类的一个完整示例,实现了文件上传、下载、创建与删除目录等,需要注意的是,put和get方法需要指定文件名,不能省略。详细源码如下:
#!/usr/bin/env python import paramiko username = "root" password = "KJsd8t34d" hostname = "192.168.1.21" port = 22 try: t = paramiko.Transport((hostname, port)) t.connect(username=username, password=password) sftp =paramiko.SFTPClient.from_transport(t) sftp.put("/home/user/info.db", "/data/user/info.db") #上传文件 sftp.get("/data/user/info_1.db", "/home/user/info_1.db") #下载文件 sftp.mkdir("/home/userdir",0755) #创建目录 sftp.rmdir("/home/userdir") #删除目录 sftp.rename("/home/test.sh","/home/testfile.sh") #文件重命名 print sftp.stat("/home/testfile.sh") #打印文件信息 print sftp.listdir("/home") #打印目录列表 t.close; except Exception, e: print str(e)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论