我正在尝试编写一个java程序,它将通过ssh连接并在工作的服务器上做一些事情(redhat linux)。我的盒子是窗户。我读到了sshj,我正试图让这个例子起作用。我已经完成了大多数依赖项,现在我在处理公钥/私钥时出错了,不幸的是我也不太了解(是的,这是一个完美的新手风暴!)。这是错误:
线程“main”中的异常net.schmizz.sshj.transport.TransportException:[HOST_KEY_NOT_VERIFIABLE]无法验证端口22上ssh-rsa
的指纹为5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d
的{{1}}主机密钥
以下是代码:
myserver
任何帮助将不胜感激,谢谢!
答案 0 :(得分:8)
试试这个
ssh.addHostKeyVerifier(new PromiscuousVerifier());
这应该有效
答案 1 :(得分:1)
试试这个
public class sshBuddy {
public static void main(String... args)
throws IOException {
final SSHClient ssh = new SSHClient();
//ssh.loadKnownHosts();
ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d");
ssh.connect("myserver");
try {
ssh.authPublickey(System.getProperty("myusername"));
final Session session = ssh.startSession();
try {
final Command cmd = session.exec("ping -c 1 google.com");
System.out.println(IOUtils.readFully(cmd.getInputStream()).toString());
cmd.join(5, TimeUnit.SECONDS);
System.out.println("\n** exit status: " + cmd.getExitStatus());
} finally {
session.close();
}
} finally {
ssh.disconnect();
}
}
}
取消注释addHostKeyVerifier并注释loadKnownHosts。它应该工作。
答案 2 :(得分:0)
这应该有效:
ssh.addHostKeyVerifier("MD5:5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d")
方法 addHostKeyVerifier 可以接收最终字符串作为参数,该字符串用于在类FingerprintVerifier.java中执行验证。
根据the repo,可以使用其他输入,例如:
"SHA1:2Fo8c/96zv32xc8GZWbOGYOlRak="
"SHA256:oQGbQTujGeNIgh0ONthcEpA/BHxtt3rcYY+NxXTxQjs="
"MD5:d3:5e:40:72:db:08:f1:6d:0c:d7:6d:35:0d:ba:7c:32"
"d3:5e:40:72:db:08:f1:6d:0c:d7:6d:35:0d:ba:7c:32"
如果有多个密钥,请仔细检查ssh服务器的默认公共密钥的指纹。