11

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)

私は何が間違っているのですか?

4

3 に答える 3

15

次のコードを使用します

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");
于 2011-02-26T12:56:16.733 に答える
7

loadKnownHosts()メソッドの呼び出しを削除します。これは、エリクソンが言及したように、デフォルトで〜/ .ssh / known_hostsの下でチェックされます(ただし、場所を引数として指定することもできます)。

ssh.addHostKeyVerifier("public-key-fingerprint");

指紋が何であるかを知るために、ねじれた方法はそのステートメントなしで接続することです-あなたは例外からわかります;-)

于 2010-09-03T22:34:02.513 に答える
3

「known_hosts」ファイルを読み取ろうとしているようですが、見つからないか、無効な形式である可能性があります。

SSHの既知のhostsファイルは、さまざまなホストの公開鍵を記録して、なりすまし攻撃を阻止します。通常、これは〜/ .ssh/known_hostsにあります。そこで空のファイルを作成してみて、それがライブラリを満たすかどうかを確認してください。

ライブラリのドキュメントには、必要な構成ファイルが記載されている可能性があります。

于 2010-09-02T19:21:59.220 に答える