一 SSHClient类
1 点睛
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')
2 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时打开压缩。
3 exec_command方法
远程命令执行方法,该命令的输入与输出流为标准输入 (stdin)、输出(stdout)、错误(stderr)的Python文件对象,方法定 义:
exec_command(self, command, bufsize=-1)
参数说明:
-
command(str类型):执行的命令串;
-
bufsize(int类型):文件缓冲区大小,默认为–1(不限制)。
4 load_system_host_keys方法
加载本地公钥校验文件,默认为~/.ssh/known_hosts,非默认路径需要手工指定,方法定义
load_system_host_keys(self, filename=None)
参数说明:
filename(str类型):指定远程主机公钥文件。
5 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())
二 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")。