paramiko是用python語言寫的一個模組,遵循SSH2協議,支援以加密和認證的方式,進行遠端伺服器的連線。paramiko支援Linux,Solaris,BSD,MacOS X,Windows等平臺
通過SSH從一個平臺連線到另外一個平臺,利用該模組,可以方便的進行ssh連線和sftp協議進行sftp檔案傳輸。
一,paramiko的連線
有兩種連線方式:
方法一:
方法二:
示例(通過paramiko進行ssh連線並執行命令的函式),如下:
在函式呼叫過程中需要注意的是,ip,username,password都是屬於字串型的,所以要加引號,後面執行的cmd,如果有多個命令需要操作時,需要通過
分號進行分割。
四,paramiko sftp示例
注意:get和put方法每次只能傳輸一個檔案,而不是整個目錄。
下面參考連結:https://www.cnblogs.com/haigege/p/5517422.html
如何傳輸整個目錄?
1,如果是要get則採用已經定義的connect方法連線到linux主機,然後通過send方法執行tar命令將需要傳輸的整個目錄打包。再傳輸打包後的檔案即可
如果是put則需要在本地打包
該方法的缺點是:在遠端或者本地進行打包或者解壓,並且打包會佔用臨時儲存空間,如果是遠端打包還需先SSH連線linux主機
2,遍歷需要get或put目錄及其子目錄,然後依次傳輸每一個檔案。優點是不需要SSH登入和打包解壓,缺點是需要目錄掃描
上面的方法是寫在一個類裡面,上面的方法中需要傳的引數:已經建立的sftp連線,remote_dir要掃描的遠端路徑
在掃描目錄時,使用listdir_attr方法會列出指定目錄下的所有檔案或目錄,並且還會列出其屬性,比如st_size,st_uid,st_gid,st_mode,st_atime,st_mtime.
我們就是根據其中的st_mode屬性來判斷是一個目錄還是檔案,並且處理st_mode的方法,可以通過引入stat模組下的S_ISDIR方法進行處理。
上面的方法是獲取到所有檔案的列表,下面的方法是根據上面的方法依次遍歷
下面再看看put,其實與get幾乎一樣,現在掃描本地目錄,然後依次遍歷檔案並put到遠端
由於是對本地目錄做掃描,因此不需要呼叫SFTP中的檔案目錄處理介面了,直接使用python的os庫即可,程式碼如下:
上傳的步驟和上面下載的步驟一樣,只需把路徑順序換一下,get改成put就可以了
上面程式碼主要寫的是連線方式和上傳下載檔案以後遇到更多繼續做記錄