繁体   English   中英

Python-使用密码通过终端连接到网络设备

[英]Python - connect to network device through Terminal using Password

我的目标是通过代理/终端服务器连接到网络设备。 当我使用腻子连接时,输入:

用户名 :ttyS 1 @ terminalservername

其中username是用户名, :ttyS后面的数字是我们要连接的端口号, terminalservername是代理服务器的名称。 我已经尝试过从这两个链接Link1Link2获得的代码

from netmiko import ConnectHandler
import time
from netmiko import redispatch

jumpserver = {'device_type': 'terminal_server','ip': 'x.x.x.x','username': 'name','password': 'pass','global_delay_factor':5}

net_connect = ConnectHandler(**jumpserver)
print net_connect.find_prompt()

net_connect.write_channel('command to access router')
time.sleep(1)
net_connect.read_channel()

redispatch(net_connect, device_type='arista_eos')
net_connect.send_command('show hostname')

当我运行脚本时,它已经在终端服务器上并且无法进一步连接到网络设备。

有人可以建议如何像PUTTY一样通过代理/终端服务器连接到网络设备并获取设备的主机名。

添加了Putty的示例屏幕截图,我想使用Python进行模拟

我从一位同事那里得到了下面的代码。 现在,我可以访问在特定端口上连接的设备,但无法登录。 当我在登录提示符下输入用户名时,它要求输入旧密码,然后再次要求输入密码。 我不明白为什么会这样,因为我能够使用Putty使用相同的帐户和密码成功登录。 仅通过Python脚本,它要求输入旧密码,然后无限期地要求输入密码。 这是代码:

import time
from netmiko import ConnectHandler, redispatch

zpe_username = "serviceaccount"
zpe_password = "xxxxxxx"
zpe_hostname = "TerminalServerName"
console_username = zpe_username + ":ttyS" + "1"
console_server = {
    "host": zpe_hostname,
    "username": console_username,
    "password": zpe_password,
    "device_type": "terminal_server",
}
print("ssh " + console_username + "@" + zpe_hostname)

net_connect = ConnectHandler(**console_server)
net_connect.write_channel(zpe_username + "\n")
time.sleep(1)
password_prompt = net_connect.read_channel()
net_connect.write_channel(zpe_password + "\n")
time.sleep(1)

redispatch(net_connect, device_type='arista_eos')
device_type = net_connect.device_type
device_prompt = net_connect.base_prompt
print(device_type, device_prompt)

您尝试过Paramiko库吗? 我看到通过它对HTTP代理的支持。 前一段时间我在公司代理背后使用它。

就是我所遵循的。

adding net_connect.enable()之后,下面的事情对我adding net_connect.enable()

import time
from netmiko import ConnectHandler, redispatch

zpe_username = "serviceaccount"
zpe_password = "xxxxxxx"
zpe_hostname = "TerminalServerName"
console_username = zpe_username + ":ttyS" + "1"
console_server = {
    "host": zpe_hostname,
    "username": console_username,
    "password": zpe_password,
    "device_type": "terminal_server",
}
print("ssh " + console_username + "@" + zpe_hostname)

net_connect = ConnectHandler(**console_server)
net_connect.enable()
net_connect.write_channel(zpe_username + "\n")
time.sleep(1)
password_prompt = net_connect.read_channel()
net_connect.write_channel(zpe_password + "\n")
time.sleep(1)

redispatch(net_connect, device_type='arista_eos')
device_type = net_connect.device_type
device_prompt = net_connect.base_prompt
print(device_type, device_prompt)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM