使用SSHJ“无法加载known_hosts”异常

时间:2010-09-02 18:37:14

标签: java ssh sshj

使用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)

我做错了什么?

3 个答案:

答案 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中。尝试在那里创建一个空文件,看看它是否满足库。

库文档可能会解决必要的配置文件。