使用 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;
}
我想使用 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;
}