使用 Java 检查启动服务器是否已准备好用于 SSH

Checking if Booting Server is Ready for SSH with Java

我想使用 Java 检查是否可以通过 SSH(端口 22)访问处于启动状态的服务器。目前,我只是像这样循环使用 isReachable 方法 ...

reachable = InetAddress.getByName(host).isReachable(timeout);

但这当然不会专门检查 SSH 端口 22,因此我的 Java 应用程序可能会跳枪并尝试在 "reachable" 时通过 SSH 连接到主机,但不一定通过 SSH。关于如何最好地检查服务器是否准备好通过 SSH 进入的任何建议?

为了专门检查端口 22,您可以使用标准 Java 套接字,例如:

Socket socket = null;
boolean reaching = false;
try {
    socket = new Socket("yourserver.com", 22);
    reaching = true;
}catch(Exception e){
    reaching = false;
}finally{
    if(socket != null){
        try { 
            socket.close();
        }catch(IOException e){}
    }
}

System.out.println(reaching);

为了避免不愉快的阻塞,您还可以设置超时:

try {
    int timeout = 3000; // timeout in ms
    socket = new Socket();
    socket.connect(new InetSocketAddress("yourserver.com",22), timeout);
    reaching = true;
} catch(Exception e) {
    reaching = false;
}