package com.atsebak.embeddedlinuxjvm.protocol.ssh;
import com.atsebak.embeddedlinuxjvm.protocol.ssh.jsch.EmbeddedSSHClient;
import com.jcraft.jsch.Session;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import org.jetbrains.annotations.Nullable;
import java.io.IOException;
import java.net.InetAddress;
@Builder
public class SSHConnectionValidator {
private String ip;
private String username;
@Nullable
private String password;
@Nullable
private String key;
private boolean useKey;
private int port;
/**
* Pings to see if it can contact hostname
*
* @return
*/
public boolean canConnectToHostname(int timeout) {
try {
return InetAddress.getByName(ip).isReachable(timeout);
} catch (IOException e) {
return false;
}
}
/**
* Can connect to remote target
*
* @return status
*/
public SSHConnectionState checkSSHConnection() {
try {
EmbeddedSSHClient sshClient = EmbeddedSSHClient
.builder()
.port(port)
.username(username)
.password(password)
.hostname(ip)
.key(key)
.useKey(useKey)
.build();
Session session = sshClient.get();
return new SSHConnectionValidator.SSHConnectionState(session.isConnected(), null);
} catch (Exception e) {
return new SSHConnectionValidator.SSHConnectionState(false, e.getMessage());
}
}
@Getter
@AllArgsConstructor
public static class SSHConnectionState {
private boolean connected;
private String message;
}
}