再見Xshell、Xftp!Python執行Linux命令、上傳下載遠程文件

相信你們應該都接觸過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下載文件