Paramiko它是Python 2.7 / 3.4+ 的一個模塊,它實現了SSH2協議,用於與遠程機器的安全(加密和認證)鏈接。與SSL不一樣,SSH2不須要強大的中央權威機構簽署的分層證書。SSH2協議是替換Telnet和rsh以便更安全的訪問遠程shell的協議 ,但該協議還包括經過加密隧道向遠程服務器打開任意通道的功能(例如:SFTP的工做方式)。git
項目主頁:http://www.paramiko.org/github
Github:https://github.com/paramiko/paramikoshell
SSH 是目前較可靠,專爲遠程登陸會話和其餘網絡服務提供安全性的協議。利用 SSH 協議能夠有效防止遠程管理過程當中的信息泄露問題。傳統的網絡服務程序,如:ftp、pop和telnet在本質上都是不安全的,由於它們在網絡上用明文傳送口令和數據,別有用心的人很是容易就能夠截獲這些口令和數據。並且,這些服務程序的安全驗證方式也是有其弱點的, 就是很容易受到「中間人」(man-in-the-middle)這種方式的攻擊。安全
ssh另外一項優勢就是對傳輸的數據進行加密,能夠加快傳輸速度,SSH有不少功能,它既能夠代替Telnet,又能夠爲FTP、POP、甚至爲PPP提供一個安全的「通道」。服務器
使用ssh登錄到服務器網絡
不指定用戶ssh
ssh 192.168.0.11加密
指定用戶spa
ssh -l root 192.168.0.11code
ssh root@192.168.0.11
指定端口、用戶
ssh -p 12333 root@216.230.230.114
pip install paramiko virtualenv source venv/bin/activate pip install paramiko
import paramiko # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', password='weiheng123') # 執行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close()
import paramiko private_key = paramiko.RSAKey.from_private_key_file('/home/.ssh/id_rsa') # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', key=private_key) # 執行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close()
paramiko遠程上傳和下載
import paramiko transport = paramiko.Transport(('192.168.1.1',22)) transport.connect(username='weiheng',password='weiheng123') sftp = paramiko.SFTPClient.from_transport(transport) # 將HelloWorld.py 上傳至服務器 /tmp/1.py sftp.put('/tmp/HelloWorld.py', '/tmp/1.py') # 將1.py 下載到本地 HelloWorld sftp.get('/tmp/1.py', '/tmp/HelloWorld') transport.close()
使用SSHClient封裝Transport
咱們可能會遇到 須要傳輸文件,有須要執行Linux命令的狀況, 由於Transport對象只能傳輸文件,不能執行Linux命令,因此咱們只須要建立一個SSHClient,而後經過SSHClient的 get_transport() 來建立Transport對象
import paramiko # 建立SSH對象 ssh = paramiko.SSHClient() # 容許鏈接不在know_hosts文件中的主機 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接服務器 ssh.connect(hostname='192.168.1.1', port=22, username='weiheng', password='weiheng123') # 獲取Transport對象 trans_obj = ssh_client.get_transport() sftp_obj = paramiko.SFTPClient.from_transport(trans_obj) sftp_obj.get_channel() # 使用sftp_obj上傳和下載文件 sftp_obj.put('source','target') sftp_obj.get('source','target') # 執行命令 stdin, stdout, stderr = ssh.exec_command('ls') # 獲取命令結果 result = stdout.read() # 關閉鏈接 ssh.close()