1. 程式人生 > >python3使用paramiko操作遠程機器

python3使用paramiko操作遠程機器

pri nag int cas bin ppi ron small 遠程文件

目標:有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.douban.com/ 豆瓣 http://pypi.hustunique.com/
華中理工大學
http://pypi.sdutlinux.org/ 山東理工大學 http://pypi.mirrors.ustc.edu.cn/ 中國科學技術大學 2.paramiko用法 參考文檔: http://blog.csdn.net/kellyseeme/article/details/51352305 第一步:通過賬號密碼連接
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目錄的操作,最好把多條語句放到同一條命令裏,不同命令使用分號隔開

python3使用paramiko操作遠程機器