Linux

由於互動式遠端菜單,Shell 腳本失敗

  • January 1, 2019

請幫忙。我們正在嘗試為我們數據中心的幾個 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,就會出現正常的互動式控制台菜單。

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 工作,這裡是工作腳本。我讓它盡可能基本。您只需傳遞主機名使用者名密碼和出口並點擊 go:

#!/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或許多替代實現中的一種。它正是針對這種情況的。它將等待特定提示,然後像互動式會話一樣發送配置的響應。

引用自:https://serverfault.com/questions/947249