2011-09-24 91 views
1

有沒有辦法通過SSH在HP集成的Lights-Out 3系統中運行多個命令?我可以登錄到iLO並逐行運行命令行,但我需要創建一個小的shell腳本,以連接到iLO並逐個運行一些命令。iLO3:多個SSH命令

這是我使用的線路,以獲取有關iLO的版本信息:

/usr/bin/ssh -i dsa_key [email protected]<iLO-IP> "version" 

現在,我該怎麼做這樣的事情?

/usr/bin/ssh -i dsa_key [email protected]<iLO-IP> "version" "show /map1 license" "start /system1" 

這不起作用,因爲iLO認爲它全是一個命令。但我需要登錄到iLO,運行這些命令,然後從iLO退出。由於每次登錄到iLO-SSH需要大約5-6秒(5個命令= 5 * 5秒......),因此需要花費太多時間依次運行它們。

我也嘗試在手動登錄後直接在iLO中分離命令,但無法在一行中使用多個命令。看起來像一個命令是通過按回車完成的。

iLO的SSH版本是:SM-CLP 1.0版

以下解決方案沒有奏效:

/usr/bin/ssh -i dsa_key [email protected]<iLO-IP> "version; show /map1 license; start /system1" 
/usr/bin/ssh -i dsa_key [email protected]<iLO-IP> "version && show /map1 license && start /system1" 
+0

已經嘗試過用分號分隔。這個「版本; show/map1許可證;啓動/系統1」導致:error_tag = COMMAND NOT RECOGNIZED –

+0

你在使用什麼機器? –

+0

我使用的HP ProLiant DL120 G7與iLO3高級版 –

回答

0

嘗試把你的命令在一個文件中(在這個例子中命名爲theFile):

version 
show /map1 license 
start /system1 

然後:

ssh -i dsa_key [email protected] < theFile 

分號等不起作用,因爲您在另一端使用的是iLO shell,而不是正常的* nix shell。所以上面我重定向文件,換行符保持不變,就好像你手動輸入了所有的文件。我希望它能起作用。

+0

謝謝,但這並沒有工作:(我沒有從iLO得到任何回報。當我在最後使用「<文件」時,沒有任何事情發生。按CTRL + C停止命令,幾次檢查「文件」,但正如你所說的那樣,每行只有一個命令 –

+0

有趣的是,你會在Python中編寫一個腳本來執行此操作嗎?然後可以使用ssh庫,而不僅僅是程序,以獲得您想要的確切行爲(發送一個命令,獲取它的輸出,然後發送另一個...全部不需要登錄兩次) –

+0

嗯,我認爲這是解決這個「問題」的唯一方法, 。我希望有一個更簡單的方法來做到這一點,只是通過shell腳本,然後我只需要修改我當前的腳本等。但我認爲我必須使用python這個。謝謝。 –

0

您試圖將iLO看作是一個普通的shell,但它確實是HP的複製界面。

話雖這麼說,最簡單的辦法就是把所有的命令在一個文件,然後管它SSH(發送所有換行符):

echo -e "version\nshow /map1 license\nstart /system1" | /usr/bin/ssh -i dsa_key [email protected]<iLO-IP> 
+0

謝謝,但這沒有工作,Sam像發送文件到系統的其他解決方案那樣的問題。沒有輸出,沒有任何反應,只能通過CTRL + C取消。 (等了幾分鐘) –

+0

是的,這相當於我的第一個解決方案(由於一些奇怪的原因不起作用)。 –

+0

@ user313133因此,HP在iLO CD上有一些示例腳本,相應的網頁爲:http://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&cc=US&swItem=MTX -a17bde2a8b0643c3b54a8d41f2&prodTypeId = 18964&prodSeriesId = 1146658 –

0

這是一個混亂的解決辦法,但你會可能會喜歡使用expect?您在expect腳本看起來類似的東西:

# Make an ssh connection 
spawn ssh -i dsa_key [email protected]<iLO-IP> 
# Wait for command prompt to appear 
expect "$" 
# Send your first command 
send "version\r" 
# Wait for command prompt to appear 
expect "$" 
# Send your second command 
send "show /map1 license\r" 
# Etc... 

在光明的一面,它是保證工作。在較暗的一面,這是一個非常笨拙的解決方法,如果事情不像它應該的那樣(例如,命令提示字符會出現在version輸出中或類似的東西),非常容易中斷。

0

我在同一個案件,並希望避免運行很多plink命令。所以,我已經看到了你可以添加一個文件與-m選項,但顯然它在一次只執行一個命令:-(

plink -ssh [email protected] -pw password -m test.txt 

什麼是文件的目的是什麼?是否有此文件的特殊格式?

我現在的文本文件看起來像如下:

set /map1/oemhp_dircfg1 oemhp_usercntxt1=CN=TEST 
set /map1/oemhp_dircfg1 oemhp_usercntxt2=CN=TEST2 
... 

有沒有執行這兩個命令的解決方案?

0

我有類似的問題,並最終使用了「RIBCL通過HTTPS」界面到iLO。這樣做的優點在於,它比通過ssh登錄/註銷更具響應性。

使用curl或其他命令行HTTP客戶端嘗試:

USERNAME=<YOUR_ILO_USERNAME> 
PASSWORD=<YOUR_ILO_PASSWORD> 
ILO_URL=https://<YOUR_ILO_IP>/ribcl 
curl -k -X POST -d "<RIBCL VERSION=\"2.0\"> 
    <LOGIN USER_LOGIN=\"${USERNAME}\" PASSWORD=\"${PASSWORD}\"> 
    <RIB_INFO MODE="READ"> 
     <GET_FW_VERSION/> 
     <GET_ALL_LICENSES/> 
    </RIB_INFO> 
    <SERVER_INFO MODE=\"write\"> 
     <SET_HOST_POWER HOST_POWER=\"Yes\"> 
    </SERVER_INFO> 
    </LOGIN> 
</RIBCL>" ${ILO_URL} 

的格式是不完全一樣,但如果你有通過HTTPS訪問iLO而不只是SSH的能力,這可能給你一些靈活性。

有關各種RIBCL命令和選項的更多詳細信息,請參見HP iLO 3 Scripting Guide (PDF)