【Python】遠程執行Linux腳本和命令

遠程執行Linux腳本和命令

對於 paramiko 安裝直接 pip 或者 PyCharm 。

完全可以用 paramiko 單純的執行 Shell 命令查看結果和上傳下載文件。paramiko 實現了 SSHv2 協議(底層使用 cryptography ),包含兩個核心組件:SSHClient 和 SFTPClient 。SSHClient 是對 SSH 會話的封裝,用於執行遠程命令,SFTPClient 是對 SFTP 客戶端的封裝,用以實現遠程文件操作。

SSHClient

# -*- coding: utf-8 -*-
import paramiko
client = paramiko.SSHClient()# 實例化SSHClient
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 自動添加策略,保存服務器的主機名和密鑰信息,如果不添加,那麼不再本地know_hosts文件中記錄的主機將無法連接

client.connect(hostname='192.168.0.134', port=22, username='root', password='*******')# 連接SSH服務端,以用戶名和密碼進行認證

# 打開一個Channel並執行命令
stdin, stdout, stderr = client.exec_command('ls')  # stdout 爲正確輸出,stderr爲錯誤輸出,同時是有1個變量有值

# 打印執行結果
print(stdout.read().decode('utf-8'))

# 關閉SSHClient
client.close()

參數說明:

client = paramiko.SSHClient(),
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())你可以理解爲固定姿勢。
client.connect(hostname='192.168.1.105', port=22, username='ftoz',password='123456')這裏就是你的linux變量依次爲地址、端口(總共65535個端口,不過ssh默認是22端口)、登錄名、密碼。
stdin, stdout, stderr = client.exec_command('df -h ') 這裏就是核心你需要做的shell命令,這三個變量不用按照這種姿勢,你可以隨意,不過按照順序你知道里面裝的什麼數據就行(重點在輸出和錯誤)。

connect():這個是實現遠程服務器連接和認證的,參數有:
hostname 連接的目標主機
port=SSH_PORT 指定端口
username=None 驗證的用戶名
password=None 驗證的用戶密碼
pkey=None 私鑰方式用於身份驗證
key_filename=None 一個文件名或文件列表,指定私鑰文件
timeout=None 可選的tcp連接超時時間
allow_agent=True, 是否允許連接到ssh代理,默認爲True 允許
look_for_keys=True 是否在~/.ssh中搜索私鑰文件,默認爲True 允許
compress=False, 是否打開壓縮。

set_missing_host_key_policy():這個是設置遠程服務器沒有在know_hosts文件中記錄時的應對策略。(可以理解爲避免報錯),參數有:
AutoAddPolicy 自動添加主機名及主機密鑰到本地HostKeys對象,不依賴load_system_host_key的配置。即新建立ssh連接時不需要再輸入yes或no進行確認
WarningPolicy 用於記錄一個未知的主機密鑰的python警告。並接受,功能上和AutoAddPolicy類似,但是會提示是新連接
RejectPolicy 自動拒絕未知的主機名和密鑰,依賴load_system_host_key的配置。此爲默認選項
exec_command():這是寫你需要執行的命令的

SSHClient常用方法

t = paramiko.Transport(('192.168.0.134', 22))# 獲取Transport實例
t.connect(username='root', password='******')# 連接SSH服務端,使用password
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put("F:\demo.txt","/home/root/demo.txt")#執行上傳動作
sftp.get("/home/root/demo.txt", "D:\demo.txt")#執行下載動作
t.close()

SFTPCLient 作爲一個 sftp 的客戶端對象,根據 ssh 傳輸協議的 sftp 會話,實現遠程文件操作,如上傳、下載、權限、狀態。

from_transport(cls,t) 創建一個已連通的SFTP客戶端通道
put(localpath, remotepath, callback=None, confirm=True) 將本地文件上傳到服務器 參數confirm:是否調用stat()方法檢查文件狀態,返回ls -l的結果
get(remotepath, localpath, callback=None) 從服務器下載文件到本地
mkdir() 在服務器上創建目錄
remove() 在服務器上刪除目錄
rename() 在服務器上重命名目錄
stat() 查看服務器文件狀態
listdir() 列出服務器目錄下的文件

最後關閉連接 client.close()。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章