簡介:
paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接。跟常用軟件xshell 、xftp功能一樣,但是可以連接多台服務器,進行復雜的操作。
安裝 :
pip install PyCrypto (PyCrypto是使用Python編寫的加密工具包)
pip install paramiko /easy_install paramiko
paramiko主要包含核心組件,一個是SSHClient類,另一個是SFTPClient類
一、SSHClient類的主要函數:
1、Connect方法
Connect實現了遠程SSH的連接並校驗。
Connect(self,hostname,port,username,password,pkey,key_filename,timeout,allow_agent,look_for_keys ,compress)
參數含義:
Hostname str :主機ip
Port int :端口
Username str:用戶名
Password str :密碼
Pkey pkey: 秘鑰
Timeout float: 超時時間
Allow_agent boool :當為flase時,禁用連到ssh代理
Look_for_keys bool : flase時,禁用在~/.ssh中搜索秘鑰文件
Compress bool : true時打開壓縮。
2、exec_command方法
遠程命令執行的方法
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)
fielname str :制定遠程主機公鑰記錄文件
4、set_missing_host_key_policy
連接主機沒有本地主機秘鑰或者HostKeys對象時策略,目前支持三種:AutoAddPolicy,RejectPolicy,WarningPolicy
AutoAddPolicy:自動添加主機名以及主機秘鑰
RejectPolicy(默認):自動拒絕未知的主機名和秘鑰
WarningPolicy: 用於記錄一個未知主機秘鑰的Python警告
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
5、簡單案例
# -*-coding:utf-8-*-
import paramiko
username = 'root'
password = 'Aliyun6688xyz'
hostname = '119.29.0.208'
port = 22
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允許連接不在know_hosts文件中的主機
ssh.connect(hostname,port,username, password)
stdin, stdout, stderr = ssh.exec_command("uptime")
print stdout.readlines()
ssh.close()
二、SFTPClient類——實現遠程操作文件
1、from_transport方法
創建一個已經連通的sftp客戶端通道
2、put函數
上傳文件到服務器
Put(self,localpath,remotepath,callback=none,confirm=none)
Localpath str : 上傳文件本地源
Remotepath str : 遠程路徑
Callback(function(int,int)) 獲取已經接受的字節數以及總傳輸字節數。
Confirm bool : 文件上傳完畢后是否調用start()函數,以便確認文件大小。
3、get方法
從遠程主機端下載文件同put
4、其他方法
Mkdir 創建目錄 sftp.mkdr(‘/home/user’,0755)
Remove 刪除主機端指定目錄 sftp.remove(‘/home/user’)
Rename 從命名服務端的文件或者目錄 sftp.rename(“/home/test.sh”,”/home/newtest.sh”)
Listdir 獲取遠程SFTP服務器端指定的目錄列表,返回list形式 sftp.listdir(“/home”)
Stat 獲取遠程主機指定文件信息 sftp.stat(“/home/test.sh”)
5、簡單測試代碼
t = paramiko.Transport((hostname,port))
t.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/test.txt'
sftp.get(localpath,remotepath)# get是獲取函數,put函數是上傳函數
t.close()