相信你們應該都接觸過Linux操做系統(Ubuntu、Centos等),那麼在使用的Linux操做系統須要使用一些遠程ssh工具,尤爲是公網服務器。python
經常使用的ssh工具主要有:Xshell、MobaXterm、Termius等linux
上傳文件到遠程Linux服務器:Xftp、Filezilla 等shell
這些工具備免費,有收費的。而且價格小貴。今天辰哥就來教你們如何用Python鏈接遠程Linux服務器,實現執行命令和上傳文件。這裏用到的Python庫是Paramiko服務器
核心知識點(亮點):ssh
一、Python鏈接遠程Linux服務器工具
二、執行命令並返回結果操作系統
三、上傳文件到遠程Linux服務器設計
四、從遠程Linux下載文件3d
01 Paramiko庫
1.安裝paramiko庫code
在開始編寫代碼以前先安裝一下Python鏈接Linux服務器的庫,安裝命令以下:
#一、安裝依賴包 pip install ecdsa pip install Crypto pip install Twisted #二、安裝paramiko pip install paramiko
提示:先安裝三個依賴庫,再安裝Paramiko,直接安裝Paramiko會報錯。
2. paramiko核心組件
SSH組件:SSHClient,做用相似於Linux的ssh命令,用於執行遠程命令。
SFTP組 件:SFTPClient,做用相似於Linux的sftp命令,用於文件上傳、下載、修改文件權限等。
02 SSHClient
一、SSHClient經常使用方法介紹
這裏辰哥以本身的遠程服務器爲例給你們演示,首先先鏈接服務器
import paramiko # ip、用戶名、密碼 ip = "遠程Linux的IP地址" port = 22 user = "root" password = "密碼" # 建立SSHClient 實例對象 ssh = paramiko.SSHClient() # 調用方法,表示沒有存儲遠程機器的公鑰,容許訪問 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 鏈接遠程機器,地址,端口,用戶名密碼 ssh.connect(ip, port, user, password, timeout=10)
執行linux命令,如:ls
# 輸入linux命令 command1 = "ls" ssh.exec_command(command1) # stdout 爲正確輸出,stderr爲錯誤輸出 stdin, stdout, stderr = ssh.exec_command(command2) # 輸出命令執行結果 result = stdout.read() print(result)
xshell返回結果:
Python執行代碼結果:
二、執行多條Linux命令
上面的案例只是執行一條Linux命令,在實際應用中每每須要執行2條或者2條以上的Linux,下面演示如何執行多條命令
錯誤的方式:
# 輸入linux命令 command1 = "cd /www/wwwroot" command2 = "ls" ssh.exec_command(command1) stdin, stdout, stderr = ssh.exec_command(command2) # 輸出命令執行結果 result = stdout.read() print(result)
上面的命令是先執行:cd /www/wwwroot ,進入到wwwroot,再查看裏面的文件夾,下面是xshell裏面執行的結果。
Python代碼執行的結果:
能夠看到結果和以前的同樣,因此這種方式是錯誤(辰哥一開始也是這樣乾的,這裏就給你們提個醒)
正確的方式:
# 輸入linux命令 command = "cd /www/wwwroot ;ls" stdin, stdout, stderr = ssh.exec_command(command) # 輸出命令執行結果 result = stdout.read() ## bytes 轉 str result = str(result) result = result.split('\\n') for i in result: print(i)
直接在用;把多條命令隔開便可,轉爲str後,經過**\\n**去分割結果,按行輸出
03 SFTPClient
一、SFTPClient經常使用方法介紹
二、 上傳文件到Linux
這裏先在本地新建一個文本文件:辰哥.txt ,並在裏面輸入了一些內容
鏈接Linux服務器
# 獲取Transport實例 tran = paramiko.Transport(('遠程Linux的ip', 22)) # 鏈接SSH服務端,使用password tran.connect(username="用戶名", password='密碼') # 獲取SFTP實例 sftp = paramiko.SFTPClient.from_transport(tran)
上傳文件
# 設置上傳的本地/遠程文件路徑 localpath = "D:/公衆號/0603/辰哥.txt" remotepath = "/www/wwwroot//辰哥.txt" # 執行上傳動做 sftp.put(localpath, remotepath) # 關閉鏈接 tran.close()
效果以下:
三、從Linux服務器下載文件
辰哥在Linux服務器新建了一個文本文件:Python研究者.txt ,並寫入內容
下載文件
localpath2 = "D:/公衆號/0603/Python研究者.txt" remotepath2 = "/www/wwwroot/Python研究者.txt" # 執行下載動做 sftp.get(remotepath2, localpath2) # 關閉鏈接 tran.close()
效果:
04 小結
本文講解了Paramiko庫,並講解ssh和sftp兩大組件,設計的核心知識點(亮點):
一、Python鏈接遠程Linux服務器
二、執行命令並返回結果
三、上傳文件到遠程Linux服務器
四、從遠程Linux下載文件