由于交互式远程菜单,Shell 脚本失败

由于交互式远程菜单,Shell 脚本失败

请帮忙。我们正在尝试为数据中心中的几个 Cyber​​Power PDU 编写一些自动化程序。它们是机架式交换 PDU(PDU41002),可以进行远程管理,但是我们在处理一些代码时遇到了麻烦。PDU 可通过 SSH 访问,当通过控制台手动登录时,我们可以成功控制插座。我们正在尝试使用远程 SSH 命令编写脚本。我们可以从另一台 Linux 服务器成功进行 SSH,并且会再次提示交互式菜单,但是,如果我们只是尝试发送 SSH 命令与菜单交互,我们会收到错误消息。问题似乎与这个专有的交互式控制台菜单有关。当您登录时,这就是您得到的全部。您不会得到正常的终端提示。只有菜单。它看起来如下:

CyberPowerSystems Inc., Command Shell v1.0

CyberPower System                        ePDU Firmware Version    1.0.8
(c) Copyright 2010 All Rights Reserved   PDU41002
+------- Information -------------------------------------------------------+
Name     : 10.10.10.2                    Date : 2019/01/02
Contact  : Administrator                 Time : 01:58:40
Location : Datacenter                    User : Administrator
Up Time  : 108 days 22 hours 38 mins 39 secs.
+------- Console -----------------------------------------------------------+

     1- Device Manager
     2- Network Settings
     3- System
     4- Logout

      <ESC>- Back, <ENTER>- Select&Reflash
> 4

如果我们尝试远程 SSH,就会得到以下结果。请注意,我们必须强制使用较旧的加密才能使其工作。这可行,但不是目标。即,我们能够通过控制台从我们的测试 Linux 机成功登录,并且一旦进入 PDU,就会显示正常的交互式控制台菜单。

[email protected]:~$ ssh -c aes128-cbc,3des-cbc [email protected]
password:
CyberPowerSystems Inc., Command Shell v1.0

CyberPower System                        ePDU Firmware Version    1.0.8
(c) Copyright 2010 All Rights Reserved   PDU41002
+------- Information -------------------------------------------------------+
Name     : 10.10.10.2                    Date : 2019/01/02
Contact  : Administrator                 Time : 01:58:40
Location : Datacenter                    User : Administrator
Up Time  : 108 days 22 hours 38 mins 39 secs.
+------- Console -----------------------------------------------------------+

     1- Device Manager
     2- Network Settings
     3- System
     4- Logout

      <ESC>- Back, <ENTER>- Select&Reflash
>

然而,如果我们尝试指定一些命令,我​​们会得到以下结果:

[email protected]:~$ ssh -c aes128-cbc,3des-cbc [email protected] "1"
password:
exec request failed on channel 0

有什么想法吗?

* 解决方案 *

如果有人看到这篇文章,并且需要让类似的东西为相同的 PDU 工作,这里有一个工作脚本。我把它写得尽可能简单。你只需传递主机名用户名密码和插座,然后点击开始:

#!/usr/bin/expect -f
set hostname [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set outlet [lindex $argv 3]
spawn ssh -c aes128-cbc,3des-cbc $username@$hostname
expect "password: "
send "$password\r"
expect "> "
send "1\r"
expect "> "
send "2\r"
expect "> "
send "1\r"
expect "> "
send "$outlet\r"
expect "> "
send "6\r"
expect "> "
send "yes\r"
expect "> "

例如,要对插座 3(可能是挂起的服务器)进行电源循环,请输入以下内容。假设您已将脚本命名为 example.sh 并将其设置为可执行文件:

./<script> <hostname or IP> <username> <password> <outlet>

./example.sh 10.10.10.2 administrator secretpass 3

希望这对其他人有帮助!

答案1

使用expect或众多替代实现之一。它正是针对这种情况而设计的。它将等待特定提示,然后像交互式会话一样发送配置的响应。

相关内容