天天看點

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

大家好,我是辰哥

相信大家應該都接觸過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常用方法介紹

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

這裡辰哥以自己的遠端伺服器為例給大家示範,首先先連接配接伺服器

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傳回結果:

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

Python執行代碼結果:

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

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裡面執行的結果。

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

Python代碼執行的結果:

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

可以看到結果和之前的一樣,是以這種方式是錯誤(辰哥一開始也是這樣幹的,這裡就給大家提個醒)

正确的方式:

# 輸入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去分割結果,按行輸出

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

03

SFTPClient

1、SFTPClient常用方法介紹

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

2、上傳檔案到Linux

這裡先在本地建立一個文本檔案:辰哥.txt ,并在裡面輸入了一些内容

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

連接配接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()
           

效果如下:

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

3、從Linux伺服器下載下傳檔案

辰哥在Linux伺服器建立了一個文本檔案:Python研究者.txt ,并寫入内容

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

下載下傳檔案

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

效果:

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

04

小結

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