2011-09-24 126 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)