Paramiko/Netmiko是否支持退出SSH会话后重连执行命令
问题根因
现有代码无法执行后续指令的原因很明确:
- 你将
exit与后续校验命令写在同一次exec_command的执行块中,会话执行到exit时就会直接终止当前SSH通道,后续写的NEXTCOMMANDS根本不会被投递到服务端执行 - 如果你的
SAVECOMMAND会触发SSH服务重启、网络栈重载这类操作,当前已经建立的SSH连接会直接被服务端重置,哪怕不写exit,原有连接也处于失效状态,无法再传输任何指令。
完全可以通过重新建立SSH会话的方式执行后续校验命令,不要把全流程命令塞在同一次连接里执行即可。
实现步骤
把整个流程拆成三个独立阶段处理:
- 第一次建立SSH连接,执行配置修改、保存触发重置的命令,确认命令投递成功后主动关闭第一次连接
- 增加等待重试逻辑,轮询检测服务器SSH端口是否恢复可连接状态,避免服务重启过程中直接连接失败
- 服务恢复后第二次建立全新SSH连接,执行日志留存所需的校验命令,收集输出完成后关闭连接
参考代码
import paramiko import time import socket HOST = 'hostname' USER = 'username' PWD = 'password' # 服务重启最大等待时长,可根据实际情况调整 MAX_WAIT = 120 def get_ssh_conn(): """建立SSH连接的通用方法""" ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(HOST, username=USER, password=PWD, timeout=10) return ssh # 第一阶段:下发配置、触发重置 ssh1 = get_ssh_conn() # 注意不要把后续校验命令和exit写在一起,nohup保证SAVECOMMAND不会因为SSH会话退出被中断 stdin, stdout, stderr = ssh1.exec_command("""COMMAND1 COMMAND2 COMMAND3 nohup SAVECOMMAND > /tmp/save.log 2>&1 & """) # 等待配置命令执行完成再退出 stdout.channel.recv_exit_status() ssh1.close() # 第二阶段:等待服务重启、SSH恢复 start_ts = time.time() ssh_ready = False while time.time() - start_ts < MAX_WAIT: try: # 先测22端口是否通 with socket.create_connection((HOST, 22), timeout=5): # 端口通了再试建立SSH连接 test_ssh = get_ssh_conn() test_ssh.close() ssh_ready = True break except (socket.error, paramiko.SSHException): time.sleep(2) if not ssh_ready: raise Exception(f"服务器{HOST}重启后SSH服务等待超时,无法连接") # 第三阶段:重连执行校验命令 ssh2 = get_ssh_conn() stdin, stdout, stderr = ssh2.exec_command("""YOUR_CHECK_COMMAND1 YOUR_CHECK_COMMAND2 YOUR_CHECK_COMMAND3 """) # 读取校验结果做日志留存 print("=== 校验命令输出 ===") for line in stdout.read().splitlines(): print(line.decode('utf-8', errors='ignore')) # 打印执行错误(如果有) err = stderr.read().decode('utf-8', errors='ignore') if err: print("=== 执行错误 ===") print(err) ssh2.close()
注意事项
- 给
nohup执行的SAVECOMMAND加上日志重定向,避免命令无输出挂起,也方便后续排查配置保存失败的问题 - 等待SSH恢复的轮询间隔、最大等待时长可以根据你服务器实际重启速度调整,不要刚触发重启就立刻发起重连
- 如果是批量操作大量服务器,可以把单台服务器的执行逻辑封装成函数,加并发控制避免同时发起太多连接把服务器SSH连接数打满
内容的提问来源于stack exchange,提问作者deltch
相关产品推荐
相关产品推荐

