使用Paramiko连接Cisco SG350交换机SSH被拒问题排查
问题解决:Paramiko连接Cisco SG350交换机失败,改用
invoke_shell()恢复正常 问题现象
- 本地公钥已预存至Cisco SG350交换机,普通控制台SSH连接正常,但使用Paramiko脚本连接时直接中断
- 控制台连接时,交换机日志生成1条拒绝、1条接受记录;Paramiko连接仅触发拒绝记录
- 测试命令
ssh -v sshUser@192.168.1.254 "show version"时控制台卡住,使用ssh -vtt命令出现流错误并断开连接
问题根源
Cisco SG350型号交换机未实现SSH exec通道。Paramiko默认常用的exec_command()依赖exec通道执行单条命令,但该交换机无法正确响应这类请求,导致连接异常。
解决方案
改用Paramiko的invoke_shell()函数建立交互式shell会话,替代exec通道完成命令交互。示例代码如下:
import paramiko import time # 初始化SSH客户端 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 通过本地私钥认证连接交换机 ssh_client.connect( hostname='192.168.1.254', username='sshUser', key_filename='/path/to/your/private_key' # 替换为本地私钥路径 ) # 创建交互式shell会话 shell = ssh_client.invoke_shell() # 发送命令(注意添加换行符模拟控制台输入) shell.send('show version\n') # 等待命令执行并读取输出 time.sleep(1) output = shell.recv(65535).decode('utf-8') print(output) # 关闭连接 ssh_client.close()
内容的提问来源于stack exchange,提问作者Viermusketiere
相关产品推荐
相关产品推荐

