Linux
由於互動式遠端菜單,Shell 腳本失敗
請幫忙。我們正在嘗試為我們數據中心的幾個 CyberPower 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
或許多替代實現中的一種。它正是針對這種情況的。它將等待特定提示,然後像互動式會話一樣發送配置的響應。