再見Xshell、Xftp!Python執行Linux命令、上傳下載遠端檔案

Python研究者發表於2021-06-05

相信大家應該都接觸過Linux作業系統(Ubuntu、Centos等),那麼在使用的Linux作業系統需要使用一些遠端ssh工具,尤其是公網伺服器。

常用的ssh工具主要有:Xshell、MobaXterm、Termius等

上傳檔案到遠端Linux伺服器:Xftp、Filezilla 等

這些工具有免費,有收費的。並且價格小貴。今天辰哥就來教大家如何用Python連線遠端Linux伺服器,實現執行命令和上傳檔案。這裡用到的Python庫是Paramiko

核心知識點(亮點):

1、Python連線遠端Linux伺服器

2、執行命令並返回結果

3、上傳檔案到遠端Linux伺服器

4、從遠端Linux下載檔案

01 Paramiko庫

1.安裝paramiko庫

在開始編寫程式碼之前先安裝一下Python連線Linux伺服器的庫,安裝命令如下:

#1、安裝依賴包
pip install ecdsa
pip install Crypto
pip install Twisted
#2、安裝paramiko
pip install paramiko

提示:先安裝三個依賴庫,再安裝Paramiko,直接安裝Paramiko會報錯。

2. paramiko核心元件

SSH元件:SSHClient,作用類似於Linux的ssh命令,用於執行遠端命令。

SFTP組 件:SFTPClient,作用類似於Linux的sftp命令,用於檔案上傳、下載、修改檔案許可權等。

02 SSHClient

1、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執行程式碼結果:

2、執行多條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

1、SFTPClient常用方法介紹

2、 上傳檔案到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()

效果如下:

3、從Linux伺服器下載檔案

辰哥在Linux伺服器新建了一個文字檔案:Python研究者.txt ,並寫入內容

下載檔案

localpath2 = "D:/公眾號/0603/Python研究者.txt"
remotepath2 = "/www/wwwroot/Python研究者.txt"
# 執行下載動作
sftp.get(remotepath2, localpath2)
# 關閉連線
tran.close()

效果:

04 小結

本文講解了Paramiko庫,並講解ssh和sftp兩大元件,設計的核心知識點(亮點):

1、Python連線遠端Linux伺服器

2、執行命令並返回結果

3、上傳檔案到遠端Linux伺服器

4、從遠端Linux下載檔案

相關文章