使用SSHJ"无法加载known_hosts"异常

use*_*194 10 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(); 
        }    
    } 

} 
Run Code Online (Sandbox Code Playgroud)

但我得到以下异常:

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)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

小智 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");
Run Code Online (Sandbox Code Playgroud)

  • sshj 已经提供了一个验证器,它只接受抛出的任何内容,尝试使用: ssh.addHostKeyVerifier(new PromiscuousVerifier()); 无需匿名内部类即可实现相同的功能。 (14认同)

shi*_*har 5

删除对loadKnownHosts()方法的调用,默认情况下,erickson提到了〜/ .ssh/known_hosts下的检查(尽管你可以指定位置作为参数),并将其替换为:

ssh.addHostKeyVerifier("public-key-fingerprint");
Run Code Online (Sandbox Code Playgroud)

为了找出指纹是什么,扭曲的方式是连接没有那个声明 - 你会发现异常;-)