python如何利用paramiko執(zhí)行服務(wù)器命令
話(huà)不多說(shuō)直接上代碼
封裝連接
@staticmethod def connect(ip, server_user, server_port, server_path): ''' 連接服務(wù)器 :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__(), }
在服務(wù)器執(zhí)行命令
def fabric_run_cmd(self, ip, server_user, server_port, server_path, cmd): ''' 批量在服務(wù)器執(zhí)行命令 :return: ''' conn = self.connect(ip, server_user, server_port, 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.channelstatus = channel.recv_exit_status()conn.close()app.logger.info(’fabric_run_cmd_status info is {}’.format(status))if status == 0: return { ’ip’: ip, ’msg’: ’執(zhí)行成功’, ’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,’msg’: e.__repr__(),’result’: 1 }
將文件發(fā)送到服務(wù)器
def fabric_put_file(self, ip, src_file, dst_file, server_user, server_port, server_path): ''' 發(fā)送文件到服務(wù)器 :return: ''' conn = self.connect(ip, server_user, server_port, server_path) if type(conn) == dict: return conn else: try:ftp = conn.open_sftp()ftp.put(dst_file, src_file) # 發(fā)送文件之前先判斷有沒(méi)有目標(biāo)文件夾 如果沒(méi)有現(xiàn)在服務(wù)器上創(chuàng)建文件夾ftp.close() # 在此判斷文件是否發(fā)送成功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, ’msg’: e.__repr__(), ’result’: 1}
能力有限,如有不妥請(qǐng)留言指正
以上就是python如何利用paramiko執(zhí)行服務(wù)器命令的詳細(xì)內(nèi)容,更多關(guān)于python 執(zhí)行服務(wù)器命令的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 如何基于python3和Vue實(shí)現(xiàn)AES數(shù)據(jù)加密2. 10個(gè)提供免費(fèi)PHP腳本下載的網(wǎng)站3. PHP擴(kuò)展之APC——Alternative PHP Cache(可選PHP緩存)4. PHP設(shè)計(jì)模式(四)原型模式Prototype實(shí)例詳解【創(chuàng)建型】5. Java 基于UDP協(xié)議實(shí)現(xiàn)消息發(fā)送6. Python編寫(xiě)nmap掃描工具7. Java向Runnable線程傳遞參數(shù)方法實(shí)例解析8. python 爬取嗶哩嗶哩up主信息和投稿視頻9. ASP.NET MVC前臺(tái)動(dòng)態(tài)添加文本框并在后臺(tái)使用FormCollection接收值10. php5.6不能擴(kuò)展redis.so的解決方法
