1. 程式人生 > 程式設計 >python如何利用paramiko執行伺服器命令

python如何利用paramiko執行伺服器命令

話不多說直接上程式碼

封裝連線

@staticmethod
  def connect(ip,server_user,server_port,server_path):
    """
    連線伺服器

    :param :
    :return:
    """
    ssh = paramiko.SSHClient()
    private_key = paramiko.RSAKey.from_private_key_file('{}.ssh/id_rsa'.format(server_path))
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
      ssh.connect(ip,port=server_port,username=server_user,pkey=private_key,timeout=5,allow_agent=True)
      return ssh
    except Exception as e:
      app.logger.info('connect_error info is {}'.format(e.__repr__()))

      return {
        'result': 1,'ip': ip,'msg': e.__repr__(),}

在伺服器執行命令

def fabric_run_cmd(self,ip,server_path,cmd):
    """
    批量在伺服器執行命令

    :return:
    """
    conn = self.connect(ip,server_path)
    try:
      if type(conn) == dict:
        return conn
      else:
        stdin,stdout,stderr = conn.exec_command(cmd)
        app.logger.info('fabric_run_cmd_stdout info is {}'.format(stdout.readlines()))
        app.logger.info('fabric_run_cmd_stderr info is {}'.format(stderr.readlines()))
        channel = stdout.channel
        status = channel.recv_exit_status()
        conn.close()
        app.logger.info('fabric_run_cmd_status info is {}'.format(status))
        if status == 0:
          return {
            'ip': ip,'msg': '執行成功','result': 0
          }
        else:
          return {
            'ip': ip,'msg': stderr.readlines(),'result': 1
          }
    except Exception as e:
      app.logger.info('fabric_run_cmd_error info is {}'.format(e.__repr__()))
      return {
        'ip': ip,'result': 1
      }

將檔案傳送到伺服器

def fabric_put_file(self,src_file,dst_file,server_path):
    """
    傳送檔案到伺服器

    :return:
    """
    conn = self.connect(ip,server_path)
    if type(conn) == dict:
      return conn
    else:
      try:
        ftp = conn.open_sftp()
        ftp.put(dst_file,src_file) # 傳送檔案之前先判斷有沒有目標資料夾 如果沒有現在伺服器上建立資料夾
        ftp.close() # 在此判斷檔案是否傳送成功
        return {
          'ip': ip,'msg': '上傳成功','result': 0
        }
      except Exception as e:
        app.logger.info('fabric_put_file_error info is {}'.format(e.__repr__()))
        return {
          'ip': ip,'result': 1
        }

能力有限,如有不妥請留言指正

以上就是python如何利用paramiko執行伺服器命令的詳細內容,更多關於python 執行伺服器命令的資料請關注我們其它相關文章!