亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > 幫助中心 > 正文

使用paramiko遠程執行命令、下發文件的實例

2024-07-09 22:40:40
字體:
來源:轉載
供稿:網友

寫部署腳本時,難免涉及到一些遠程執行命令或者傳輸文件。

之前一直使用sh庫,調用sh.ssh遠程執行一些命令,sh.scp傳輸文件,但是實際使用中還是比較麻煩的,光是模擬用戶登陸這一點,還需要單獨定義方法模擬輸入。

感受一下:

from sh import sshPASS = 'xxxx'def ssh_interact(line, stdin):  line = line.strip()  print(line)  if line.endswith('password:'):    stdin.put(PASS)ssh('x.x.x.x', _out=ssh_interact)

來自官方文檔

后來發現paramiko庫更加優雅、便捷,所以準備用pramiko替換掉sh。

之前通過同事了解到,paramiko在遠程執行python腳本時,腳本中的輸出內容可能會通過stderr這個管道輸出出來,所以直接用paramiko的SSHClient類中的exec_command方法執行,通過讀stderr管道中有無輸出來判斷命令是否成功執行的方式是行不通的。所以用更底層一些的Channel類的recv_exit_status方法判斷執行退出碼更好一些。

安裝

可以通過使用pip install paramiko安裝,細節這里不再贅述。

封裝

首先定義幾個異常

# coding: utf-8import os.pathfrom paramiko import SSHClient, AutoAddPolicy, AuthenticationExceptionclass ConnectError(Exception):  """  連接錯誤時拋出的異常  """  passclass RemoteExecError(Exception):  """  遠程執行命令,失敗時拋出的異常  """  passclass SCPError(Exception):  """  遠程下發文件時拋出的異常  """  pass
...class Remote(object):  def __init__(self, host, username, password=None, port=22, key_filename=None):    self.host = host    self.username = username    self.password = password    self.port = port    self.key_filename = key_filename    self._ssh = None  def _connect(self):    self._ssh = SSHClient()    self._ssh.set_missing_host_key_policy(AutoAddPolicy())    try:      if self.key_filename:        self._ssh.connect(self.host, username=self.username, port=self.port, key_filename=self.key_filename)      else:        self._ssh.connect(self.host, username=self.username, password=self.password, port=self.port)    except AuthenticationException:       self._ssh = None      raise ConnectionError('連接失敗,請確認用戶名、密碼、端口或密鑰文件是否有效')    except Exception as e:      self._ssh = None      raise ConnectionError('連接時出現意料外的錯誤:%s' % e)  def get_ssh(self):    if not self._ssh:      self._connect()    return self._ssh

實例化SSHClient類,通過它的connect()方法獲取SSH連接。

需要注意的是,遠程訪問的主機若是第一次連接,屬于未知設備需要認證,通過set_missing_host_key_policy()方法設置一種策略,這里使用的是AutoAddPolicy()。

這里的_connect支持兩種方式登錄,一種是提供主機的用戶名密碼,另一種是通過密鑰文件。在連接時檢查如果指定了密鑰文件則使用這種方式登錄,否則通過用戶名密碼登錄。

_connect()雖然是實際的建立連接的方法,但實際對外接口是get_ssh(),如果已經有建立好的SSH連接直接返回,避免重復建立連接。

class Remote(object):  ...  def ssh(self, cmd, root_password=None, get_pty=False, super=False):    cmd = self._prepare_cmd(cmd, root_password, super)    stdout = self._exec(cmd, get_pty)    return stdout  def _prepare_cmd(self, cmd, root_password=None, super=False):    if self.username != 'root' and super:      if root_password:        cmd = "echo '{}'|su - root -c '{}'".format(root_password, cmd)      else:        cmd = "echo '{}'|sudo -p '' -S su - root -c '{}'".format(self.password, cmd)    return cmd  def _exec(self, cmd, gty_pty=False):    channel = self.get_ssh().get_transport().open_session()    if get_pty:      channel.get_pty()    channel.exec_command(cmd)    stdout = channel.makefile('r', -1).readlines()    stderr = channel.makefile_stderr('r', -1).readlines()    ret_code = channel.recv_exit_status()    if ret_code:      msg = ''.join(stderr) if stderr else ''.join(stdout)      raise RemoteExecError(msg)    return stdout
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产一区二区激情| 欲色天天网综合久久| 韩国三级电影久久久久久| 国产精品尤物福利片在线观看| 久久精品视频一| 国产精品综合久久久| 欧美性理论片在线观看片免费| 国产精品久久久久一区二区| 狠狠躁夜夜躁人人爽天天天天97| 日韩国产精品一区| 中文在线不卡视频| 欧美怡春院一区二区三区| 国产精品嫩草影院一区二区| 992tv成人免费视频| 久久久欧美精品| 国产综合在线观看视频| 最好看的2019年中文视频| 欧美日韩国产精品专区| 尤物99国产成人精品视频| 日本欧美一级片| 俺也去精品视频在线观看| 久久精品国产电影| 亚洲综合在线播放| 亚洲一区中文字幕| 国产精品91久久久久久| 日韩欧美国产高清91| 亚洲国产精品久久精品怡红院| 精品国产91久久久| 欧美亚洲另类激情另类| 国产精品三级久久久久久电影| 欧美午夜精品久久久久久人妖| 国产在线精品一区免费香蕉| 亚洲xxxx在线| 国产亚洲人成a一在线v站| 久久91超碰青草是什么| 日韩av片电影专区| 粗暴蹂躏中文一区二区三区| 成人av电影天堂| 中文字幕少妇一区二区三区| 97精品在线视频| 中文日韩电影网站| 欧美日韩在线视频一区二区| 日本19禁啪啪免费观看www| 亚洲精品99久久久久中文字幕| 国产91精品久久久久| 日韩久久免费视频| 亚洲成人a级网| 久久成人av网站| 久久视频在线免费观看| 国产91精品黑色丝袜高跟鞋| 欧美午夜女人视频在线| 亚洲国产精品大全| 欧美成年人在线观看| 91av成人在线| 国产精品入口尤物| 精品一区二区三区四区在线| 91高清视频在线免费观看| 91久久精品美女| 欧美精品中文字幕一区| 亚洲成人av资源网| 久久久精品视频成人| 中文字幕视频在线免费欧美日韩综合在线看| 国产欧美va欧美va香蕉在线| 欧美成人性生活| 日韩在线国产精品| 亚洲欧美日本另类| 国产一区香蕉久久| 亚洲区免费影片| 国产精品久久久久久久久免费| 97久久精品国产| www.亚洲人.com| 日本19禁啪啪免费观看www| 国产999在线| 色爱精品视频一区| 中文字幕日韩精品在线观看| 欧洲成人性视频| 国产在线拍揄自揄视频不卡99| 国产成人在线一区| 91精品国产91久久久久久| 91麻豆国产语对白在线观看| 中文字幕一精品亚洲无线一区| 欧美日本在线视频中文字字幕| 亚洲男人的天堂网站| 欧美日韩一区二区三区在线免费观看| 亚洲人成在线观看网站高清| 一本色道久久综合狠狠躁篇的优点| 国产精品视频男人的天堂| 亚洲国产另类久久精品| 久久久91精品国产一区不卡| 亚洲综合日韩在线| 欧美精品一区二区免费| 久久精品精品电影网| 日本国产欧美一区二区三区| 久久影视电视剧免费网站清宫辞电视| 欧美性69xxxx肥| 国产成人精品久久亚洲高清不卡| 国产成人高潮免费观看精品| 亚洲成人免费网站| 91精品国产综合久久香蕉的用户体验| 国产精品第2页| 97av在线视频免费播放| 国内精品小视频在线观看| 久久久视频在线| 午夜精品蜜臀一区二区三区免费| 2019中文字幕在线免费观看| 久久亚洲精品视频| 国产美女久久精品香蕉69| 国产欧美精品在线| 久久久久久久久久久成人| 国产精品日韩久久久久| 日本国产精品视频| 亚洲人线精品午夜| 亚洲国产婷婷香蕉久久久久久| 久久综合久久美利坚合众国| 亚洲一区二区中文| 国产精品入口夜色视频大尺度| 欧美精品成人在线| 亚洲精品av在线| 国产精品白丝av嫩草影院| 国产精品视频播放| 国产精品色悠悠| 亚洲精品av在线播放| 久久久久久久久久久亚洲| 久久夜色精品国产| 亚洲网在线观看| 国产精品盗摄久久久| 国产美女搞久久| 日韩有码在线视频| 国产精品av电影| 国产精品一区二区三区成人| 亚洲精品v天堂中文字幕| 亚洲欧美日韩在线一区| 日韩精品在线观看网站| 国产精品欧美激情在线播放| 亚洲qvod图片区电影| 国外色69视频在线观看| 国产精品久久久久久久久| 国产手机视频精品| 久久久免费av| 久久中文久久字幕| 欧美激情精品久久久久久大尺度| 欧美午夜久久久| 久热在线中文字幕色999舞| 亚洲男人天堂手机在线| 成人激情电影一区二区| 91探花福利精品国产自产在线| 国产日韩换脸av一区在线观看| 国产精品久久久久久影视| 最新的欧美黄色| 亚洲精品视频久久| 亚洲精品之草原avav久久| 欧美在线视频在线播放完整版免费观看| 日韩av在线一区二区| 大桥未久av一区二区三区| 性色av一区二区三区| 97avcom| 欧美大片欧美激情性色a∨久久| 高跟丝袜欧美一区| 日本人成精品视频在线| 亚洲欧美在线免费观看| 久久的精品视频| 日韩免费观看高清| 91精品啪在线观看麻豆免费| 成人网址在线观看|