如何使用路由器 Ericsson IPOS 自动执行 ssh 会话?

网络工程 路由器 SSH 自动化 命令
2022-02-11 04:30:02

我正在尝试通过从 linux 服务器运行集中式脚本来自动化路由器的运行状况检查过程。到目前为止,我能够使用 ssh 和 rsa 密钥对在没有密码提示的情况下访问路由器服务器,并从服务器发送一些命令。

例如,我可以运行这个自动化脚本(覆盖文件):

ssh -t -t  admin@$server << EOF
del output.txt
y
show port | save output.txt
exit
EOF

但是,当我发送命令“start shell”来初始化路由器中的 bash shell 时,我无法自动运行保存在路由器中的脚本。相反,我必须输入命令来手动运行脚本,即 ./script.sh。

ssh -t -t  admin@$server << EOF
del output.txt
y
start shell <<EOF
./script.sh  # <-------------This doesn't get received by bash
EOF

我不确定我能做什么。如果有任何其他方式我可以运行该脚本并接收输出,而无需手动输入命令,无论是否使用 ssh 或 rsa 密钥对,我都在听。

2个回答

我不确定我能做什么。如果有任何其他方式我可以运行该脚本并接收 I/O 而无需手动输入命令,无论是否使用 ssh 或 rsa 密钥对,我都在听。

不要试图用 bash shell 来驱动交互式 pty 会话......这就像试图用锤爪的尖端转动螺丝......没有用。使用 Expect 语言,或 Python / Ruby / Perl。

我写了一篇关于在 python 中驱动自动路由器会话的方法的演示文稿(使用 pexpect)。这只是您可以使用的几种技术之一。如果您想走这条路,本演示文稿还包括一个简单的 Expect 脚本。

如果您想使用 Windows,一种流行的选择是在 SecureCRT 中编写脚本

这通常发生在脚本等到下一个关键字(如最后一个字符“#”)传递下一个命令并完成运行命令结果时。在这种情况下,直到开始 shell最后一个字符“#”之后最后一个字符是“$”。因此,需要在脚本中更改等待命令将看到 $ 而不是 #。

例如,使用 VB 脚本。

Screen.Send "del output.txt" & Chr(13)
crt.Screen.WaitForString "#"
crt.Screen.Send "y" & Chr(13)
crt.Screen.WaitForString "#"
crt.Screen.Send "start shell" & Chr(13)
crt.Screen.WaitForString "$"
crt.Screen.Send "./script.sh" & Chr(13)
crt.Screen.WaitForString "$"