python3使用paramiko操作遠程機器


目標:有A和B兩台機器,希望在機器A上操作B上的腳本
 
解決方法:使用paramiko實現操作遠程機器
 
1.安裝paramiko
 
安裝第三方包【pip3 install paramiko】
 
 
如果pip訪問國外站點總超時,可以使用國內鏡像,使用-i指定, --trusted-host pypi.douban.com信任鏡像源
pip3 install paramiko -i http://pypi.douban.com/ --trusted-host pypi.douban.com
 
pipy國內鏡像目前有:
http://pypi.hustunique.com/  華中理工大學
http://pypi.sdutlinux.org/  山東理工大學
http://pypi.mirrors.ustc.edu.cn/  中國科學技術大學
 
 
 
2.paramiko用法
參考文檔:
 
第一步:通過賬號密碼連接
def connect(host,username,password):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        ssh.connect(host,username=username,password=password,allow_agent=True)
        return ssh
    except:
        return None
 
host為要連接的機器IP,username和password為登錄機器的賬號密碼
 
第二步:在遠程機執行命令(shell命令)
def exec_commands(conn,cmd):
    stdin,stdout,stderr = conn.exec_command(cmd)
    results=stdout.read()+stderr.read()
    print(results)
    return results
 
stdin:標准輸入
stdout:標准正確輸出
stderr:標准錯誤輸出
通過stdout.read()獲得對應輸出內容
 
第三步:和遠程機器間傳遞文件
def ftpssh(frompath,topath,method="get"):
    t = paramiko.Transport(遠程機器IP)
    t.connect(username= 遠程機器登錄用戶名, password = 遠程機器登錄密碼)
    sftp = paramiko.SFTPClient.from_transport(t)
    if method == "get":#將遠程文件copy到本地
        sftp.get(frompath, topath)
    elif method == "put":#將本地文件copy到遠程機器上
        sftp.put(frompath, topath)
    t.close()
 
method=get,將遠程機對應文件下載到本地的路徑下
method=put,將本地文件上傳到遠程機對應路徑下
 
其他說明:
1.通過paramiko操作遠程機器的python3文件,python3腳本里有讀寫文件的操作
明明是python3結果有編碼問題,所以改了遠程機器腳本,讀寫文件時強指定編碼格式為utf-8
with open(“文件","w",encoding='utf-8'as f:
 
2.我通過第二步執行命令,讀取不到控制台輸出的結果,所以通過將輸出結果重定向到本地文件,然后通過遠程機器間傳遞文件來實現把文件放到本地
這樣就直接讀取本地文件了
 
比如:我執行Appium測試腳本,會在控制台輸出一些操作結果,我想獲得這些結果
cmd="source ~/.bash_profile;/usr/local/bin/python3 ./test.py >> ./log.txt 2>&1"
exec_commands(cmd)
ftpssh(WebmanageConfig.uitestpath + "/testsuit/temptestcaseslist.txt", "./temptestcaseslist.txt")

 

3.在執行遠程機器的腳本時,發現有些環境變量沒有讀取到,所有我又在腳本中加載了遠程機器的環境變量文件
source ~/.bash_profile
 
4.每條遠程命令執行都是單獨處理的,處理完后都會回到初始目錄。
所以有cd目錄的操作,最好把多條語句放到同一條命令里,不同命令使用分號隔開
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM