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

使用NAPALM通过SSH密钥连接Cisco路由器失败求助

解决NAPALM连接Cisco IOS时SSH密钥认证失败的问题

核心正确配置示例

直接使用以下格式编写NAPALM连接代码,避免参数错误:

from napalm import get_network_driver

# 选择Cisco IOS驱动
driver = get_network_driver('ios')
# 初始化设备连接
device = driver(
    hostname='你的路由器IP/主机名',
    username='netbox',
    password='',  # 必须传空字符串,不能省略或传None
    optional_args={
        'ssh_key_file': '/home/netbox/.ssh/id_rsa',  # 必须用绝对路径,不要用~
        'timeout': 60  # 可选,防止连接超时
    }
)

try:
    device.open()
    # 测试获取配置
    running_config = device.get_config()['running']
    print(running_config)
finally:
    device.close()

关键排查步骤

  • 绝对路径强制要求:NAPALM运行在非交互式进程中,无法解析~环境变量,必须写死密钥文件的绝对路径(比如/home/netbox/.ssh/id_rsa或/opt/netbox/.ssh/id_rsa,取决于你的NetBox安装路径)。
  • 密钥权限严格控制:SSH安全机制会拒绝权限过松的密钥,执行以下命令修正:
    sudo chown netbox:netbox /home/netbox/.ssh/id_rsa
    sudo chmod 600 /home/netbox/.ssh/id_rsa
    sudo chmod 644 /home/netbox/.ssh/id_rsa.pub
    
  • 密码参数不能省略:IOS驱动要求显式传入password='',如果留空或传None,会触发密码输入提示。
  • 驱动类型不能选错:必须使用'ios'驱动,不要混淆成'iosxr'或'nxos',不同驱动的optional_args参数规则不同。
  • NetBox集成配置修正:如果是在NetBox后台配置NAPALM,修改configuration.py中的参数:
    NAPALM_USERNAME = 'netbox'
    NAPALM_PASSWORD = ''
    NAPALM_ARGS = {
        'ssh_key_file': '/home/netbox/.ssh/id_rsa',
        'timeout': 60,
    }
    

快速验证方法

在NetBox服务器上以netbox用户身份运行测试脚本,排除上下文权限问题:

sudo -u netbox python3 << 'EOF'
from napalm import get_network_driver
driver = get_network_driver('ios')
device = driver(
    hostname='192.168.1.1',
    username='netbox',
    password='',
    optional_args={'ssh_key_file': '/home/netbox/.ssh/id_rsa'}
)
device.open()
print(device.get_facts())
device.close()
EOF

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 18:06:16