paramiko是用python語言寫的一個模塊,遵循SSH2協議,支持以加密和認證的方式,進行遠程服務器的連接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平臺通過SSH從一個平臺連接到另外一個平臺。利用該模塊,可以方便的進行ssh連接和sftp協議進行sftp文件傳輸。
首先讓我們理清以下幾個名詞:
SSHClient:包裝了Channel、Transport、SFTPClient
Channel:是一種類Socket,一種安全的SSH傳輸通道;
Transport:是一種加密的會話(但是這樣一個對象的Session并未建立),并且創建了一個加密的tunnels,這個tunnels叫做Channel;
Session:是client與Server保持連接的對象,用connect()/start_client()/start_server()開始會話.
paramiko 參考http://docs.paramiko.org/en/2.0/index.html
下載安裝
pycrypto,由于 paramiko 模塊內部依賴pycrypto,所以先下載安裝pycrypto
pip3 install pycrypto
pip3 install paramiko
具體模塊使用
SSHClient:
遠程連接分為兩種:(1)基于用戶名密碼連接 (2)基于公鑰秘鑰連接
通過是用paramiko遠程操作,其實本質也分為兩種:(1)只用SSHClient (2)自己創建一個transport
基于用戶名密碼連接
import paramiko # 創建SSH對象ssh = paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(hostname='host', port=22, username='root', password='123')# 執行命令 stdout命令結果,stderr錯誤stdin, stdout, stderr = ssh.exec_command('ls')# 獲取命令結果 result = stdout.read()# 關閉連接ssh.close()SSHClient 封裝 Transport
import paramiko transport = paramiko.Transport(('hostname', 22))transport.connect(username='root', password='123') ssh = paramiko.SSHClient()ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('df')print(stdout.read()) transport.close()基于公鑰秘鑰連接
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')# 創建SSH對象ssh = paramiko.SSHClient()# 允許連接不在know_hosts文件中的主機ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接服務器ssh.connect(hostname='host', port=22, username='root', key=private_key)# 執行命令stdin, stdout, stderr = ssh.exec_command('df')# 獲取命令結果result = stdout.read()# 關閉連接ssh.close()SSHClient 封裝Transport
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')transport = paramiko.Transport(('hostname', 22))transport.connect(username='wupeiqi', pkey=private_key)ssh = paramiko.SSHClient()ssh._transport = transportstdin, stdout, stderr = ssh.exec_command('df')transport.close()
新聞熱點
疑難解答