我如何等待连接建立?

我如何等待连接建立?

我需要等到目标主机启动并运行并接受特定端口上的连接。

我想将其作为命令的一部分,ssh -o ProxyCommand等待目标主机启动并且 sshd 启动后,nc 才能最终连接到它。

我如何在 Linux 中做到这一点?

答案1

您可以使用 nmap 来实现这一点。以下命令将尝试建立到 22 端口 (SSH) 的 TCP 连接,并在成功时返回以下内容:

$ nmap -sT -p 22 <host>
Starting Nmap 6.47 ( http://nmap.org ) at 2016-06-02 12:40 CEST
Nmap scan report for <host> (<ip>)
Host is up (0.00078s latency).
PORT   STATE SERVICE
22/tcp open  ssh

当主机没有响应时,您将收到以下信息:

$ nmap -sT -p 22 <host>

Starting Nmap 6.47 ( http://nmap.org ) at 2016-06-02 12:40 CEST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 1.04 seconds

您可能还想添加以下选项,以避免在主机无响应时等待太久:

$ nmap -sT -p 22 <host> --max-retries 1 --host-timeout 1

如果将此命令放入带有 while 循环和睡眠定时器的脚本中,则可以获得预期结果。如下所示:

while true
do
  nmap -sT -p 22 <host> --max-retries 1 --host-timeout 1 | grep open > /dev/null
  if [ $? -eq 0 ]
  then
    echo "Your host is ready"
    exit 0
  fi
  sleep 1
done

答案2

尝试在循环内连接:

COUNT=0; 
until ssh $user@$ip || [ $COUNT -eq 10 ]; do sleep 1; (( COUNT++ )); done

循环将在 10 次尝试后或 ssh 连接建立后结束。

相关内容