如何通过Python从Linux跳板机SSH访问调制解调器设备
通过Paramiko连接跳板机访问调制解调器的实现方案
Hey,看你现在是想用Paramiko通过Linux跳板机去访问调制解调器,还要登录后获取设备详情对吧?我给你梳理下现有代码的优化点,还有后续访问调制解调器的完整流程:
先优化你的跳板机连接代码
你的基础连接代码已经有了,但可以调整得更稳妥些,比如处理路径转义、注意安全策略:
import paramiko import time # 初始化SSH客户端 ssh = paramiko.SSHClient() # 自动添加未知主机密钥(生产环境建议提前把跳板机密钥加到known_hosts,换成RejectPolicy更安全) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接跳板机,支持密码+密钥双重验证(如果跳板机允许的话) ssh.connect( 'jump server ip', username='user', password='pass', key_filename=r'D:\New folder\id_rsa' # 用原始字符串避免转义问题 ) # 测试连接是否成功 stdin, stdout, stderr = ssh.exec_command('pwd') print(stdout.read().decode().strip()) # 打印当前路径验证
从跳板机访问调制解调器的关键步骤
因为要登录调制解调器需要交互式操作,exec_command只能执行单次命令,所以得用交互式shell:
1. 建立交互式shell会话
# 获取跳板机的交互式shell shell = ssh.invoke_shell() shell.settimeout(10) # 设置超时,避免无限等待 # 等待跳板机提示符出现(根据你的跳板机实际提示符调整,比如$、#) while not shell.recv_ready(): time.sleep(0.5) print("跳板机连接成功:", shell.recv(4096).decode().strip())
2. 登录调制解调器并获取设备详情
假设你的调制解调器用telnet访问,流程如下(如果是SSH访问,把telnet换成ssh命令即可):
# 发送telnet命令连接调制解调器(替换成你的调制解调器IP) shell.send('telnet 192.168.1.1\n') time.sleep(2) # 输入调制解调器用户名(根据设备登录提示调整) shell.send('modem_username\n') time.sleep(1) # 输入调制解调器密码 shell.send('modem_password\n') time.sleep(2) # 发送获取设备详情的命令(替换成你的设备支持的命令,比如show system info) shell.send('show device details\n') time.sleep(3) # 读取并打印设备详情 device_info = shell.recv(8192).decode() print("\n调制解调器设备详情:") print(device_info)
3. 清理连接资源
操作完成后记得关闭连接,避免资源占用:
# 退出调制解调器登录(根据设备命令调整,比如exit或quit) shell.send('exit\n') time.sleep(1) # 关闭跳板机SSH连接 ssh.close()
一些实用提示
- 不要依赖固定的
time.sleep,可以通过匹配设备的提示符(比如"Login:"、"Password:")来判断下一步操作,这样更可靠 - 生产环境中不要用
AutoAddPolicy,提前将跳板机的SSH密钥添加到本地的known_hosts文件中,换成paramiko.RejectPolicy()更安全 - 如果调制解调器支持SSH,可以直接在跳板机上执行
ssh modem_user@modem_ip,流程和telnet类似,只是命令不同
内容的提问来源于stack exchange,提问作者emerb nura
相关产品推荐
相关产品推荐

