Назад | Перейти на главную страницу

Сбой сценария оболочки из-за интерактивного удаленного меню

Пожалуйста помоги. Мы пытаемся написать некоторую автоматизацию для нескольких CyberPower PDU в нашем центре обработки данных. Это коммутируемые PDU для монтажа в стойку (PDU41002), и они могут управляться удаленно, однако у нас возникли проблемы с некоторыми кодами. PDU доступен через SSH, и при ручном входе в систему через консоль мы можем успешно управлять розетками. Мы пытаемся создать сценарий с помощью удаленных команд SSH. Мы можем успешно использовать SSH с другого сервера Linux, и снова будет предложено интерактивное меню, однако, если вместо этого мы просто попытаемся отправить команды 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, мы увидим обычное интерактивное меню консоли.

administrator@10.10.10.1:~$ ssh -c aes128-cbc,3des-cbc administrator@10.10.10.2
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
>

Однако если мы попытаемся указать какую-то команду, мы получим следующее:

administrator@10.10.10.1:~$ ssh -c aes128-cbc,3des-cbc administrator@10.10.10.2 "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

Надеюсь, это поможет кому-то еще!

Использовать expect или одна из множества альтернативных реализаций. Он предназначен именно для этого случая. Он будет ждать определенного запроса, а затем отправит настроенный ответ как интерактивный сеанс.