我正在尝试从我们网络上的设备获取vpn列表。该列表很长,没有进一步输入就无法完全返回。有没有一种方法可以快速获取完整列表,而无需循环并通过ssh连接反复发送回车命令?
我尝试使用send命令,但是由于尾随字符是<--- More --->而不是预期的字符,所以超时。 send_command_timing不会超时,但是只会返回整个列表的一小部分,并在结尾加上<--- More --->文字,表明我什么都没得到。目前,我使用send_command_timing反复遍历循环以获取下一行,然后从输出中剥离<--- More --->字符串。问题在于该方法非常慢,无法以任何现实的方式使用。
from netmiko import ConnectHandler
device = {
'device_type': 'cisco_ios',
'host': "example.host",
'username': "user",
'password': "pass",
}
trailingString = "<--- More --->"
connect = ConnectHandler(**device)
print("Connection complete")
connect.send_command("enable 3" + '\n', expect_string="Password:")
connect.send_command("pass" + '\n', expect_string="#")
output = connect.send_command_timing("sho vpn-sessiondb svc")
while trailingString in output:
if(output.endswith(trailingString)):
output = output[:-(len(trailingString) + 1)] # Added + 1 to remove the trailing newline
output += connect.send_command_timing("\n")
print(output)
connect.disconnect()
我还没有找到一种解决方案来足够快地检索send_command_timing函数的所有输出,以使其合理使用。我希望有一种更好/更快的方式来获取此信息。
答案 0 :(得分:1)
您似乎正在使用“ cisco_ios”设备类型,但正在连接到Cisco ASA(基于您要发送的“ show vpn-sessiondb svc”命令)?
Netmiko应该在SSH连接完成后不久自动禁用输出分页。因此,您不应在输出中看到'<--- More --->字符串。
我怀疑如果将Netmiko设备类型切换为“ cisco_asa”,则输出页面调度问题将消失。
或者用不同的措词,因为您正在使用“ cisco_ios”设备类型,所以将错误的命令禁用了输出分页,该命令已发送到远程设备。切换到正确的设备类型后,应发送正确的命令(即Netmiko将自动发送“终端寻呼机0”命令)。
答案 1 :(得分:0)
我无法直接通过netmiko找到解决方案,但是通过更改设备本身的某些值,我可以获得全部输出。对于我连接到的特定设备,使用终端寻呼机0删除默认的行数限制。
因此,通过在运行connect.send_command_timing(“ sho vpn-sessiondb svc”)之前使用connect.send_command(“ terminal pager 0”),我能够获得整个返回值。
connect = ConnectHandler(**device)
#connect = Netmiko(**device)
print("Connection complete")
connect.send_command("enable 3" + '\n', expect_string="Password:")
connect.send_command("enable3secret" + '\n', expect_string="#")
connect.send_command("terminal pager 0")
output = connect.send_command_timing("sho vpn-sessiondb svc")
答案 2 :(得分:0)
我建议您检查一下您是否可以运行 terminal length 0
。如果这在您的环境中不起作用,则可能支持此命令的其他一些变体。
答案 3 :(得分:0)
我遇到了类似的问题。我通过将目标设备会话的 global_delay_factor 设置为“2”来解决此问题 This link explains the concepts in greater detail
device = {
'device_type': 'cisco_ios',
'host': "x.x.x.x",
'username': 'some_user',
'password': 'some_pass',
'global_delay_factor': 2
}
ssh = ConnectHandler(**device)
output = ssh.send_command("show running")
print(output)
enter code here