我正在尝试通过Paramiko使用Python自动配置路由器,但是每当我通过exec_command函数测试一个命令时,它似乎什么也做不了。如果我通过Putty输入相同的命令,它仍然可以工作。我对Python还是个新手。
这是Ubiquiti Edge Router X的配置。我已经看过这里的答案和一些在线教程,我认为我做的一切都是正确的。
import paramiko
ip = '10.0.1.1'
user = 'ubnt'
passw = 'ubnt'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = ip, port=22, username = user, password = passw)
stdin, stdout, stderr = ssh.exec_command("configure")
stdin, stdout, stderr = ssh.exec_command("set service dhcp-server shared-network-name LAN subnet 10.0.1.0/24 dns-server 4.2.2.2")
stdin, stdout, stderr = ssh.exec_command("commit")
stdin, stdout, stderr = ssh.exec_command("save")
output = stdout.readlines()
print(output)预期的输出应该是我的路由器上的dns服务器设置应该更改为4.2.2.2,但它似乎没有任何作用。任何帮助都将不胜感激。谢谢。
发布于 2019-05-01 14:18:58
我假设set、commit和save实际上是configure命令的子命令,而不是顶级命令。
因此,您需要将它们作为输入提供给configure命令,而不是尝试将它们作为独立的命令来执行(您的代码正在做的事情)。
stdin, stdout, stderr = ssh.exec_command("configure")
stdin.write("set service dhcp-server shared-network-name LAN subnet 10.0.1.0/24 dns-server 4.2.2.2\n")
stdin.write("commit\n")
stdin.write("save\n")
stdin.flush()另请参阅Execute (sub)commands in secondary shell/command on SSH server in Paramiko
发布于 2019-05-11 03:35:11
谢谢你们的帮助。在用谷歌搜索了几天之后,我找到了解决方案。我不得不把我的命令放在一个包装器类中,然后paramiko就可以很好地工作了。
顶级命令的操作模式包装器: /opt/vyatta/bin/vyatta-op-cmd-wrapper
配置模式包装器: /opt/vyatta/sbin/vyatta-cfg-cmd-wrapper
stdin, stdout, stderr = sshClient.exec_command('/opt/vyatta/bin/vyatta-op-cmd-wrapper configure')
stdin, stdout, stderr = sshClient.exec_command('/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper begin')
stdin, stdout, stderr = sshClient.exec_command('/opt/vyatta/bin/vyatta-op-cmd-wrapper set service dhcp-server shared-network-name LAN subnet 10.0.1.0/24 dns-server 4.2.2.2')
stdin, stdout, stderr = sshClient.exec_command('/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper commit')
stdin, stdout, stderr = sshClient.exec_command('/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper save')
stdin, stdout, stderr = sshClient.exec_command('/opt/vyatta/sbin/vyatta-cfg-cmd-wrapper end')https://stackoverflow.com/questions/55925509
复制相似问题