You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个SSH会话中对Cisco交换机执行两次ping操作?

解决Paramiko单次SSH会话内连续执行Cisco交换机Ping操作失败的问题

你的问题出在Paramiko的exec_command对Cisco IOS命令的处理方式上。Cisco设备的ping命令默认是交互式的(即使指定了目标主机,也会持续发送数据包直到手动中断),这会导致exec_command的通道一直处于阻塞状态,第一次命令未正确结束就会影响后续操作,甚至触发"SSH session not active"错误。

改用交互式Shell会话来执行命令是更可靠的方案,同时给ping命令添加repeat参数让它自动完成并返回,避免阻塞。

修改后的完整代码如下:

import paramiko
import time

def connect_ssh(ip, username, password):
    ssh = paramiko.SSHClient()
    try:
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(ip, 22, username, password, timeout=5, look_for_keys=False, allow_agent=False)
        # 建立交互式Shell会话
        shell = ssh.invoke_shell()
        # 等待设备提示符出现,确保连接就绪
        time.sleep(1)
        shell.recv(65535)
        return ssh, shell, "OK"
    except Exception as e:
        return None, None, f"ERROR: {str(e)}"

def remote_ping(shell, host):
    try:
        # 发送带次数的ping命令,Cisco IOS中repeat指定发送包数量
        shell.send(f"ping {host} repeat 5\n")
        # 等待命令执行完成,根据设备响应速度调整延迟
        time.sleep(3)
        # 读取所有输出
        output = shell.recv(65535).decode()
        # 判断ping结果
        return "OK" if "Success rate is 100 percent" in output else "ERROR"
    except Exception as e:
        return f"ERROR: {str(e)}"

ip = '172.16.1.1'
username = 'a'
password = 'a'

ssh, shell, result_ssh = connect_ssh(ip, username, password)
if ssh and shell:
    result_first_ping = remote_ping(shell, '8.8.8.8')
    result_second_ping = remote_ping(shell, '8.8.4.4')
    ssh.close()
else:
    result_first_ping = "SSH_FAILED"
    result_second_ping = "SSH_FAILED"

print(f"First ping result: {result_first_ping}")
print(f"Second ping result: {result_second_ping}")

关键修改说明

  • 改用invoke_shell:建立持久的交互式会话,所有命令都在同一个Shell中执行,避免exec_command每次新建通道可能带来的会话问题。
  • 添加repeat参数:Cisco IOS的ping命令加上repeat N后,会自动发送N个数据包然后结束,不会一直阻塞。
  • 等待与输出读取:每次发送命令后添加适当延迟,确保设备完成命令执行并返回输出,再读取结果。

内容的提问来源于stack exchange,提问作者Seggenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 17:38:15