我有一个脚本创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