python如何利用paramiko執行伺服器命令
阿新 • • 發佈:2020-11-10
話不多說直接上程式碼
封裝連線
@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 執行伺服器命令的資料請關注我們其它相關文章!