使用python遠端操作linux過程解析

taotao12發表於2021-01-20

這篇文章主要介紹了使用python遠端操作linux過程解析,文中透過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在雲服務測試中,往往需要我們進入雲服務內容進行相關內容的測試。這測試可以使用平臺自身的noVNC、外部輔助xshell等工具連線到雲服務內部進行測試。

但是在如此反覆的測試操作中,就需要用到自動化測試方法去解決這方面的需求。

python中我們可以透過第三方庫paramiko,對linux的雲伺服器進行操作。

如下命令先行安裝

pip install paramiko

paramiko包含兩個核心元件:SSHClient和SFTPClient。

SSHClient的作用類似於Linux的ssh命令,是對SSH會話的封裝,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用於執行遠端命令。

SFTPClient的作用類似與Linux的sftp命令,是對SFTP客戶端的封裝,用以實現遠端檔案操作,如檔案上傳、下載、修改檔案許可權等操作。

Paramiko中的幾個基礎名詞:

Channel:一種類Socket,一種安全的SSH傳輸通道; Transport:一種加密的會話,使用時會同步建立了一個加密的Tunnels(通道),這個Tunnels叫做Channel; Session:client與Server保持連線的物件,用connect()/start_client()/start_server()開始會話。 Paramiko的基本使用 SSHClient常用的方法介紹 connect(): 站長部落格 實現遠端伺服器的連線與認證,對於該方法只有hostname是必傳引數。

常用引數

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檔案中記錄時的應對策略。目前支援三種策略:

設定連線的遠端主機沒有本地主機金鑰或HostKeys物件時的策略:

AutoAddPolicy 自動新增主機名及主機金鑰到本地HostKeys物件,不依賴load_system_host_key的配置。即新建立ssh連線時不需要再輸入yes或no進行確認 WarningPolicy 用於記錄一個未知的主機金鑰的python警告。並接受,功能上和AutoAddPolicy類似,但是會提示是新連線 RejectPolicy 自動拒絕未知的主機名和金鑰,依賴load_system_host_key的配置。此為預設選項 exec_command():在遠端伺服器執行Linux命令的方法。 open_sftp():在當前ssh會話的基礎上建立一個sftp會話。該方法會返回一個SFTPClient物件。

利用SSHClient物件的open_sftp()方法,可以直接返回一個基於當前連線的sftp物件,可以進行檔案的上傳等操作。

sftp = client.open_sftp()

sftp.put('test.txt','text.txt')

SSHClient常用的方法舉例

import paramiko

 

# 例項化SSHClient

client = paramiko.SSHClient()

# 自動新增策略,儲存伺服器的主機名和金鑰資訊,如果不新增,那麼不再本地know_hosts檔案中記錄的主機將無法連線

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 連線SSH服務端,以使用者名稱和密碼進行認證

client.connect(hostname='192.168.1.105', port=22, username='root', password='123456')

# 開啟一個Channel並執行命令

stdin, stdout, stderr = client.exec_command('df -h ') # stdout 為正確輸出,stderr為錯誤輸出,同時是有1個變數有值

# 列印執行結果

print(stdout.read().decode('utf-8'))

# 關閉SSHClient

client.close()

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989889/viewspace-2751552/,如需轉載,請註明出處,否則將追究法律責任。

相關文章