SSHJ

2010-09-02 19 views
7

kullanarak "bilinen_yükleme yüklenemedi" özel durumu SSHJ kullanırken bir istisna alıyorum. İşteSSHJ

bunu hayata nasıl:

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

} 

Ama şu istisna olsun:

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) 

yanlış yapıyorum?

cevap

5

erickson varsayılan olarak ~/.ssh/known_hosts altında çekleri belirtildiği gibi loadKnownHosts çağrısı() yöntemi, çıkarın (siz de olsa bağımsız değişken olarak konum belirtebilirsiniz) ve ile değiştirin:

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

parmak izi ne olduğunu öğrenmek için dolambaçlı bir yolu bu ifade olmadan bağlanmak olurdu - istisnasız ;-)

2

"Known_hosts" dosyasını okumaya çalışıyor gibi görünüyor, ancak bulamıyor veya geçersiz bir biçimde bulamıyor.

SSH tarafından bilinen ana dosya, çeşitli ana bilgisayarların bazı sahtekarlık saldırılarını engellemek için ortak anahtarını kaydeder. Normalde ~/.ssh/known_hosts dosyasında bulunur. Orada boş bir dosya oluşturmayı deneyin ve kütüphaneyi tatmin edip edemeyeceğini görün.

Kitaplık belgelerinin, gerekli yapılandırma dosyalarını ele alması olasıdır.

+0

Sunucuda nerede bulunur? – user234194

+0

@ user234194: Dosyayı istemcide yapın. Sunucu normalde müşterinin nereden geldiğini kontrol etmez (gerçek bir PITA olur). –

15

Kullanım folowing kod dışarı bulacaksınız

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"); 
+12

sshj zaten ona atılan her şeyi kabul eden bir doğrulayıcı sağlar: ssh.addHostKeyVerifier (yeni PromiscuousVerifier()); Aynı şeyi anonim iç sınıfa ihtiyaç duymadan elde edecektir. –