Linux命令等待SSH服务器启动

我有一个脚本创build一个虚拟机,并给我一个IP地址。 然后我想要做这样的事情:

waitforssh 192.168.2.38 && ssh 192.168.2.38 

它将等待机器启动,ssh正在响应,然后ssh进入它。

waitforssh是我需要find的命令。

nmap,netcat,fping或ping会做这个工作吗? 我尝试了netcat,但是如果主机无法访问,它会在几秒钟内放弃。

它需要处理机器本身正在引导的事实,并且可能需要一些时间来响应networking数据包。

我没有一个主机,我可以ssh来控制它是否正常,但这应该工作:

 while ! ssh <ip> do echo "Trying again..." done 

或者更明确的shell脚本:

 #!/bin/sh ssh $1 while test $? -gt 0 do sleep 5 # highly recommended - if it's in your local network, it can try an awful lot pretty quick... echo "Trying again..." ssh $1 done 

保存为(说) waitforssh.sh然后用sh waitforssh.sh 192.168.2.38调用它sh waitforssh.sh 192.168.2.38

可以给ssh命令一个命令在远程机器上作为最后的参数执行。 所以调用ssh $MACHINE echo在循环中回显。 成功时,它会在失败255时在$?中返回0。您当然必须使用证书进行paswordless身份validation。

那么,我不确定你的意思什么,但那又如何:

 $ ping host.com | grep --line-buffered "bytes from" | head -1 && ssh host.com 

第一个命令ping | ... | head -1 ping | ... | head -1 ping | ... | head -1等待服务器发送单ping回复并存在。 然后ssh进场。 要知道, grep可以缓冲输出,所以这是什么--line-buffered的。

你可以用bash函数包装这个命令,以完全按照你所描述的方式使用它。

 $ waitfor() { ping $1 | grep --line-buffered "bytes from" | head -1 } $ waitfor server.com && ssh server.com