再見Xshell、Xftp!Python執(zhí)行Linux命令、上傳下載遠程文件
大家好,我是辰哥
相信大家應(yīng)該都接觸過Linux操作系統(tǒng)(Ubuntu、Centos等),那么在使用的Linux操作系統(tǒng)需要使用一些遠程ssh工具,尤其是公網(wǎng)服務(wù)器。
常用的ssh工具主要有:Xshell、MobaXterm、Termius等
上傳文件到遠程Linux服務(wù)器:Xftp、Filezilla 等
這些工具有免費,有收費的。并且價格小貴。今天辰哥就來教大家如何用Python連接遠程Linux服務(wù)器,實現(xiàn)執(zhí)行命令和上傳文件。這里用到的Python庫是Paramiko
核心知識點(亮點):
1、Python連接遠程Linux服務(wù)器
2、執(zhí)行命令并返回結(jié)果
3、上傳文件到遠程Linux服務(wù)器
4、從遠程Linux下載文件
01Paramiko庫
1.安裝paramiko庫
在開始編寫代碼之前先安裝一下Python連接Linux服務(wù)器的庫,安裝命令如下:
- #1、安裝依賴包
- pip install ecdsa
- pip install Crypto
- pip install Twisted
- #2、安裝paramiko
- pip install paramiko
提示:先安裝三個依賴庫,再安裝Paramiko,直接安裝Paramiko會報錯。
2.paramiko核心組件
SSH組件:SSHClient,作用類似于Linux的ssh命令,用于執(zhí)行遠程命令。
SFTP組件:SFTPClient,作用類似于Linux的sftp命令,用于文件上傳、下載、修改文件權(quán)限等。
02SSHClient
1、SSHClient常用方法介紹
這里辰哥以自己的遠程服務(wù)器為例給大家演示,首先先連接服務(wù)器
- import paramiko
- # ip、用戶名、密碼
- ip = "遠程Linux的IP地址"
- port = 22
- user = "root"
- password = "密碼"
- # 創(chuàng)建SSHClient 實例對象
- ssh = paramiko.SSHClient()
- # 調(diào)用方法,表示沒有存儲遠程機器的公鑰,允許訪問
- ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
- # 連接遠程機器,地址,端口,用戶名密碼
- ssh.connect(ip, port, user, password, timeout=10)
執(zhí)行l(wèi)inux命令,如:ls
- # 輸入linux命令
- command1 = "ls"
- ssh.exec_command(command1)
- # stdout 為正確輸出,stderr為錯誤輸出
- stdin, stdout, stderr = ssh.exec_command(command2)
- # 輸出命令執(zhí)行結(jié)果
- result = stdout.read()
- print(result)
xshell返回結(jié)果:
Python執(zhí)行代碼結(jié)果:
2、執(zhí)行多條Linux命令
上面的案例只是執(zhí)行一條Linux命令,在實際應(yīng)用中往往需要執(zhí)行2條或者2條以上的Linux,下面演示如何執(zhí)行多條命令
錯誤的方式:
- # 輸入linux命令
- command1 = "cd /www/wwwroot"
- command2 = "ls"
- ssh.exec_command(command1)
- stdin, stdout, stderr = ssh.exec_command(command2)
- # 輸出命令執(zhí)行結(jié)果
- result = stdout.read()
- print(result)
上面的命令是先執(zhí)行:cd /www/wwwroot ,進入到wwwroot,再查看里面的文件夾,下面是xshell里面執(zhí)行的結(jié)果。
Python代碼執(zhí)行的結(jié)果:
可以看到結(jié)果和之前的一樣,所以這種方式是錯誤(辰哥一開始也是這樣干的,這里就給大家提個醒)
正確的方式:
- # 輸入linux命令
- command = "cd /www/wwwroot ;ls"
- stdin, stdout, stderr = ssh.exec_command(command)
- # 輸出命令執(zhí)行結(jié)果
- result = stdout.read()
- ## bytes 轉(zhuǎn) str
- result = str(result)
- result = result.split('\\n')
- for i in result:
- print(i)
直接在用;把多條命令隔開即可,轉(zhuǎn)為str后,通過\\n去分割結(jié)果,按行輸出
03SFTPClient
1、SFTPClient常用方法介紹
2、上傳文件到Linux
這里先在本地新建一個文本文件:辰哥.txt ,并在里面輸入了一些內(nèi)容
連接Linux服務(wù)器
- # 獲取Transport實例
- tran = paramiko.Transport(('遠程Linux的ip', 22))
- # 連接SSH服務(wù)端,使用password
- tran.connect(username="用戶名", password='密碼')
- # 獲取SFTP實例
- sftp = paramiko.SFTPClient.from_transport(tran)
上傳文件
- # 設(shè)置上傳的本地/遠程文件路徑
- localpath = "D:/公眾號/0603/辰哥.txt"
- remotepath = "/www/wwwroot//辰哥.txt"
- # 執(zhí)行上傳動作
- sftp.put(localpath, remotepath)
- # 關(guān)閉連接
- tran.close()
效果如下:
3、從Linux服務(wù)器下載文件
辰哥在Linux服務(wù)器新建了一個文本文件:Python研究者.txt ,并寫入內(nèi)容
下載文件
- localpath2 = "D:/公眾號/0603/Python研究者.txt"
- remotepath2 = "/www/wwwroot/Python研究者.txt"
- # 執(zhí)行下載動作
- sftp.get(remotepath2, localpath2)
- # 關(guān)閉連接
- tran.close()
效果:
04小結(jié)
本文講解了Paramiko庫,并講解ssh和sftp兩大組件,設(shè)計的核心知識點(亮點):
1、Python連接遠程Linux服務(wù)器
2、執(zhí)行命令并返回結(jié)果
3、上傳文件到遠程Linux服務(wù)器
4、從遠程Linux下載文件
本文轉(zhuǎn)載自微信公眾號「Python研究者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Python研究者公眾號。