Cisco 控制器 ssh 不接受来自 python 脚本的命令

问题描述 投票:0回答:1

我正在使用 python 脚本通过 ssh 连接到本地 Cisco 控制器。我使用的是 Windows 10、Python 3.7 并使用最新的 paramiko 库。我相信我的脚本建立了连接,但似乎无法正确输入用户名和密码。

SSH code

import paramiko
import time
import getpass
import os
from host_file import network_devices
from config_file import host_conf


UN = input("Username : ")
PW = getpass.getpass("Password : ")


# For loop to specify number of hosts
for ip in  network_devices:
    print (ip)
    ssh1 = paramiko.SSHClient()
    ssh1.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh1.connect(ip, port=22, username=UN, password=PW)
    remote = ssh1.invoke_shell()
    remote.send('terminal length 0\n')
    time.sleep(1)
    #loop allows you to specify number of commands
    for command in host_conf:
        remote.send(' %s \n' % command)
        time.sleep(5)
        buf = remote.recv(65000)
        print (buf)
        f = open('sshlogfile0001.txt', 'ab')
        f.write(buf)
        f.close()
    ssh1.close()





Host file

network_devices = ['10.100.10.2','10.100.100.1']


config_file

host_conf = ['config paging disable','show time', 'exit']

这些是脚本打印回来的输出,它们来自多次运行。

(思科控制器) 用户:终端长度0 密码:*********** 用户: 退出 密码:

(思科控制器) 用户:终端长度0 密码:*********** 用户: 退出 密码:

(思科控制器) 用户:终端长度0 密码:*********** 用户: 退出 密码:

(思科控制器) 用户:终端长度0 密码:*********** 用户: 退出 密码:

这是 cmd 本身显示的输出

b' (思科控制器) 用户:终端长度0 密码:*********** 用户:' b'出口 密码:' 10.100.100.2 乙' (思科控制器) 用户:终端长度0 密码:*********** 用户:'

python ssh cisco
1个回答
0
投票

您的问题是

paramiko
隐式假设用户名是与 SSH 命令内联分配的;但是,您要连接的 Cisco 控制器会发送明确的
User
提示,如下所示

(Cisco Controller) User: terminal length 0 Password:*********** User: exit Password:

这是旧版 Cisco 5500 系列无线控制器的一个众所周知的问题。 您唯一能做的就是显式检测提示,这可能需要类似

pexpect
而不是
paramiko

© www.soinside.com 2019 - 2024. All rights reserved.