使用SSHJ时出现异常。
以下是我实施它的方式:
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
final SSHClient ssh = new SSHClient();
ssh.loadKnownHosts();
ssh.connect("serverName");
try{
ssh.authPublickey("myUserId");
final Session session = ssh.startSession();
try{
final Command cmd = session.exec("net send myMachineName Hello!!!");
System.out.println(cmd.getOutputAsString());
System.out.println("\n Exit Status: "+cmd.getExitStatus());
}finally{
session.close();
}
}finally{
ssh.disconnect();
}
}
}
但我得到以下例外:
Exception in thread "main" java.io.IOException: Could not load known_hosts
at net.schmizz.sshj.SSHClient.loadKnownHosts(SSHClient.java:528)
at SSHTEST.main(SSHTEST.java:25)
我做错了什么?
答案 0 :(得分:16)
使用以下代码
final SSHClient ssh = new SSHClient();
ssh.addHostKeyVerifier(
new HostKeyVerifier() {
public boolean verify(String arg0, int arg1, PublicKey arg2) {
return true; // don't bother verifying
}
}
);
ssh.connect("LocalHost");
答案 1 :(得分:5)
删除对loadKnownHosts()方法的调用,默认情况下,erickson提到了〜/ .ssh / known_hosts下的检查(尽管你可以指定位置作为参数),并将其替换为:
ssh.addHostKeyVerifier("public-key-fingerprint");
要找出指纹是什么,扭曲的方式就是在没有该声明的情况下连接 - 你会从异常中找到; - )
答案 2 :(得分:3)
听起来它正在尝试读取“known_hosts”文件,但无法找到它,或者可能是无效格式。
SSH已知主机文件记录各种主机的公钥,以阻止某些欺骗攻击。通常它位于〜/ .ssh / known_hosts中。尝试在那里创建一个空文件,看看它是否满足库。
库文档可能会解决必要的配置文件。