paramiko 遵循SSH2協議,支援以加密和認證的方式,進行遠端伺服器的連線,可以實現遠端檔案的上傳,下載或通過ssh遠端執行命令。
專案地址:https://github.com/paramiko/paramiko
官方文件:http://docs.paramiko.org/
一、安裝
root@ubuntu:~/paramiko# pip install paramiko
測試是否安裝成功
>>> import paramiko >>>
二、上傳檔案到遠端伺服器
原理:通過SFTPClient類根據SSH傳輸協議的sftp會話,實現遠端檔案上傳、下載等操作。實現遠端檔案上傳、下載。
任務:10. 1.101.187向10.1.101.186傳送檔案。
10.1.101.187 目錄/root/paramiko 有三個檔案 paramikosend.py test test.tar
10.1.101.186 目錄/root/paramiko 開始為空資料夾
執行python paramikosend.py,程式碼如下
root@ubuntu:~/paramiko# cat paramikosend.py import paramiko,datetime,os hostname = '10.1.101.186' username = 'root' password = '123456' port = 22 local_dir = '/root/paramiko' remote_dir = '/root/paramiko' try: t=paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) files = os.listdir(local_dir) for f in files: sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f)) t.close() except Exception: print "connect error!"
結果:
三、從遠端伺服器下載檔案
原理:通過SFTPClient類根據SSH傳輸協議的sftp會話,實現遠端檔案上傳、下載等操作。實現遠端檔案上傳、下載。
任務:現在10.1.101.186的/root/paramiko/temp186目錄有兩個檔案,將其下載到10.1.101.187的/root/paramiko/temp187目錄。
執行 python paramikoget.py ,程式碼如下
root@ubuntu:~/paramiko# cat paramikoget.py import paramiko,datetime,os hostname = '10.1.101.186' username = 'root' password = '123456' port = 22 local_dir = '/root/paramiko/temp187' remote_dir = '/root/paramiko/temp186' try: t=paramiko.Transport((hostname,port)) t.connect(username=username,password=password) sftp = paramiko.SFTPClient.from_transport(t) files = sftp.listdir(remote_dir) #這裡需要注意,列出遠端檔案必須使用sftp,而不能用os for f in files: sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f)) t.close() except Exception: print "connect error!"
結果:
四、執行命令測試
原理:通過SSHClient類執行命令。SSHClient類是SSH服務會話的高階表示,封裝了傳輸、通道以及SFTPClient的校驗、建立方法,通常用於執行命令。
任務:通過10.1.101.187連線到10.1.101.186,然後進入目錄/root/paramiko,建立一個目錄lxy。
執行python paramikocommand.py,程式碼如下:
root@ubuntu:~/paramiko# cat paramikocommand.py #!/usr/bin/python import paramiko hostname = '10.1.101.186' username = 'root' password = '123456' port = 22 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=hostname,port=port,username=username,password=password) stdin, stdout, stderr = ssh.exec_command("cd /root/paramiko;mkdir lxy") print stdout.readlines() ssh.close()
結果:
命令中也可以帶引數:
root@ubuntu:~/paramiko# cat paramikocommand.py #!/usr/bin/python import paramiko hostname = '10.1.101.186' username = 'root' password = '123456' port = 22 name='testcmd' ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=hostname,port=port,username=username,password=password) stdin, stdout, stderr = ssh.exec_command("cd /root/paramiko;mkdir %s" %name) print stdout.readlines() ssh.close()
Note:exec_command為單個會話,執行完成之後會回到登入時的預設目錄。
比如執行下面兩句。
stdin, stdout, stderr = ssh.exec_command("cd /root/paramiko;mkdir %s" %name) stdin,stdout,stderr = ssh.exec_command('mkdir haha')
haha目錄最終是在預設的/root目錄下新建的,而不是/root/paramiko目錄。
五、python遠端執行操作的其他開源模組
fabric:fabric是封裝了paramiko模組來實現ssh來傳輸檔案的。
pexpect:也可以實現ssh 登入到某個使用者指定的主機上,執行某個使用者指定的命令
本文作者starof,因知識本身在變化,作者也在不斷學習成長,文章內容也不定時更新,為避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.cnblogs.com/starof/p/4670433.html有問題歡迎與我討論,共同進步。