paramiko介紹
paramiko是基于Python實(shí)現(xiàn)的SSH2遠(yuǎn)程安全連接台汇,支持認(rèn)證及密鑰方式±橄梗可以實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行苟呐、文件傳輸、中間SSH代理等功能奔缠,相對(duì)于Pexpect掠抬,封裝的層次更高,更貼近SSH協(xié)議的功能
paramiko安裝
[root@lxcos]# pip install paramiko
paramiko核心組件及方法
兩大核心組件
- SSHClient類
- SFTPClient類
SSHClient常用方法
connect方法
connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None, auth_timeout=None, gss_trust_dns=True, passphrase=None)
參數(shù)說明:
- hostname(str類型)校哎,連接的目標(biāo)主機(jī)地址两波;
- port(int類型),連接目標(biāo)主機(jī)的端口闷哆,默認(rèn)為22腰奋;
- username(str類型),校驗(yàn)的用戶名(默認(rèn)為當(dāng)前的本地用戶名)抱怔;
- password(str類型)劣坊,密碼用于身份校驗(yàn)或解鎖私鑰;
- pkey(Pkey類型)屈留,私鑰方式用于身份驗(yàn)證局冰;
- key_filename(str or list(str)類型)测蘑,一個(gè)文件名或文件名列表,用于私鑰的身份驗(yàn)證康二;
- timeout(float類型)碳胳,一個(gè)可選的超時(shí)時(shí)間(以秒為單位)的TCP連接;
- allow_agent(bool類型)沫勿,設(shè)置為False時(shí)用于禁用連接到SSH代理挨约;
- look_for_keys(bool類型),設(shè)置為False時(shí)用于來禁用在~/.ssh中搜索私鑰文件产雹;
- compress(bool類型)诫惭,設(shè)置為True時(shí)打開壓縮。
exec_command方法
stdin,stdout,stderr = exec_command(command, bufsize=-1, timeout=None, get_pty=False, environment=None)
參數(shù)說明:
- command(str類型)蔓挖,執(zhí)行的命令串夕土;
- bufsize(int類型),文件緩沖區(qū)大小瘟判,默認(rèn)為-1(不限制)
load_system_host_keys方法
(加載本地公鑰校驗(yàn)文件隘弊,默認(rèn)為~/.ssh/known_host,非默認(rèn)路徑需要手工指定。)
load_system_host_keys(self,filename=None)
set_missing_host_policy方法
(設(shè)置連接的遠(yuǎn)程主機(jī)沒有主機(jī)密鑰或HostKeys對(duì)象時(shí)的策略荒适,目前支持三種,分別是AutoAddPolicy开镣、RejectPolicy(默認(rèn))刀诬、WarningPolicy,僅限用于SSHClient類。)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
參數(shù)說明
- AutoAddPolicy,目標(biāo)添加主機(jī)名及主機(jī)密鑰到本地HostKeys對(duì)象邪财,并將其保存陕壹,不依賴load_system_host_keys()的配置,即使~/.ssh/hnown_hosts不存在也不產(chǎn)生影響树埠;
- RejectPolicy糠馆,自動(dòng)拒絕未知的主機(jī)名和密鑰,依賴load_system_host_keys()的配置怎憋;
- WarningPolicy,用于記錄一個(gè)未知的主機(jī)密鑰的Python警告又碌,并接收它,功能上AutoAddPolicy相似绊袋,但未知主機(jī)會(huì)有告警毕匀。
SFTPClient類常用方法
作為一個(gè)SFTP客戶端對(duì)象,根據(jù)SSH傳輸協(xié)議的sftp會(huì)話癌别,實(shí)現(xiàn)遠(yuǎn)程文件操作皂岔,比如文件上傳、下載展姐、權(quán)限躁垛、狀態(tài)等操作剖毯。
- mkdir,在SFTP服務(wù)端創(chuàng)建目錄,如sftp.mkdir("/home/userdir",mode=0777),默認(rèn)模式是0777(八進(jìn)制)教馆,在某些系統(tǒng)上逊谋,mode被忽略。在使用它的地方活玲,當(dāng)前的umask值首先被屏蔽掉涣狗。
- remove,刪除SFTP服務(wù)端指定目錄,如sftp.remove("/home/userdir")舒憾。
- rename,重命名SFTP服務(wù)端文件或目錄镀钓,如sftp.rename("/home/test.sh","/home/testfile.sh")
- stat,獲取遠(yuǎn)程SFTP服務(wù)端指定文件信息,如sftp.stat("/home/testfile.sh")镀迂。
- listdir,獲取遠(yuǎn)程SFTP服務(wù)端指定目錄列表丁溅,以Python的列表(List)形式返回,如sftp.listdir("/home")探遵。
實(shí)例
從遠(yuǎn)程下載文件到本地
#!/usr/bin/python
import paramiko
t = paramiko.Transport(("某IP地址",22))
t.connect(username = "用戶名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.get(remotepath, localpath) #上傳文件和下載差別只有g(shù)et/put和本地與遠(yuǎn)程文件的路徑不同
t.close()
上傳文件到遠(yuǎn)程
#!/usr/bin/python
import paramiko
t = paramiko.Transport(("某IP地址",22))
t.connect(username = "用戶名", password = "口令")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.put(localpath, remotepath)
t.close()
執(zhí)行遠(yuǎn)程命令
#!/usr/bin/python
import paramiko
s = paramiko.SSHClient()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect("某IP地址",22,"用戶名", "密碼")
stdin, stdout, stderr = s.exec_command("你的命令")
if stderr:
print stderr.read()
else:
print stdout.readlines()
s.close()