Python - 使用密码通过终端连接到网络设备
Python - connect to network device through Terminal using Password
我的目标是通过 proxy/terminal 服务器连接到网络设备。当我使用 Putty 连接时,我输入:
用户名:ttyS1@终端服务器名
其中用户名是用户名:ttyS后面的数字是我们要连接的端口号,terminalservername 是代理服务器的名称。我已经尝试了从这两个链接获得的代码 Link1 and Link2
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 那样通过 proxy/terminal 服务器连接到网络设备并获取设备的主机名。
我从我的一位同事那里得到了以下代码。我现在可以访问连接在特定端口上的设备,但我无法登录。当我在登录提示符下输入用户名时,它要求输入旧密码,然后再次要求输入密码。我不明白为什么会这样,因为我可以使用 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 代理的支持。我不久前在公司代理后面使用过它。
This 是我所关注的。
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)
我的目标是通过 proxy/terminal 服务器连接到网络设备。当我使用 Putty 连接时,我输入:
用户名:ttyS1@终端服务器名
其中用户名是用户名:ttyS后面的数字是我们要连接的端口号,terminalservername 是代理服务器的名称。我已经尝试了从这两个链接获得的代码 Link1 and Link2
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 那样通过 proxy/terminal 服务器连接到网络设备并获取设备的主机名。
我从我的一位同事那里得到了以下代码。我现在可以访问连接在特定端口上的设备,但我无法登录。当我在登录提示符下输入用户名时,它要求输入旧密码,然后再次要求输入密码。我不明白为什么会这样,因为我可以使用 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 代理的支持。我不久前在公司代理后面使用过它。
This 是我所关注的。
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)