2010-09-02 5 views
7

Ich bekomme eine Ausnahme bei der Verwendung von SSHJ."Kann keine bekannten_Hosts" Ausnahme mit SSHJ

Hier ist, wie ich es umgesetzt:

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(); 
     }  
    } 

} 

Aber ich bekomme die folgende Ausnahme:

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) 

Was mache ich falsch?

Antwort

5

Entfernen Sie den Aufruf an loadKnownHosts() -Methode, die als erickson Kontrollen erwähnt unter ~/.ssh/known_hosts standardmäßig (Sie den Speicherort als Argument angeben können, als auch though), und ersetzen Sie es mit:

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

um herauszufinden, was der Fingerabdruck ist, würde die verdrehte Art und Weise, ohne diese Aussage zu verbinden - Sie von der Ausnahme ;-)

2

Es klingt wie es versucht, eine "known_hosts" -Datei zu lesen, aber nicht finden, oder möglicherweise in einem ungültigen Format.

Die bekannte Host-Datei von SSH zeichnet den öffentlichen Schlüssel für verschiedene Hosts auf, um einige Spoofing-Angriffe zu vereiteln. Normalerweise liegt es in ~/.ssh/known_hosts. Versuchen Sie, dort eine leere Datei zu erstellen und festzustellen, ob diese der Bibliothek entspricht.

Die Bibliotheksdokumentation adressiert wahrscheinlich die erforderlichen Konfigurationsdateien.

+0

Wo im Server? – user234194

+0

@ user234194: Machen Sie die Datei auf dem Client. Der Server überprüft normalerweise nicht, woher der Client kommt (das wäre eine echte PITA). –

15

Verwenden

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"); 
0 der folowing Code herausfinden
+12

sshj stellt bereits einen Verifier bereit, der einfach akzeptiert, was auch immer darauf geworfen wird, versuchen Sie es mit: ssh.addHostKeyVerifier (new PromiscuousVerifier()); Es wird das gleiche ohne die Notwendigkeit der anonymen inneren Klasse erreichen. –

Verwandte Themen