2012-06-06 13 views
5

我想編寫一個Java程序,將通過SSH連接,做工作的服務器上的一些東西(SSH-rsa`主機密鑰紅帽Linux版)。我的箱子是窗戶。我閱讀了關於sshj的內容,並試圖讓這個例子工作。我已經完成了大部分的依賴關係,現在我在處理公鑰/私鑰時遇到了一個錯誤,不幸的是我在那裏也不太瞭解(是的,這是一個完美的新手風暴!)。這裏的錯誤:在線程「主要」 net.schmizz.sshj.transport.TransportException與sshj例如(「EXEC」)掙扎:無法驗證`指紋

例外:[HOST_KEY_NOT_VERIFIABLE]無法在端口22上

這裏驗證與指紋5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3dssh-rsa主鍵myserver是代碼:

import net.schmizz.sshj.SSHClient; 
import net.schmizz.sshj.common.IOUtils; 
import net.schmizz.sshj.connection.channel.direct.Session; 
import net.schmizz.sshj.connection.channel.direct.Session.Command; 

import java.io.IOException; 
import java.util.concurrent.TimeUnit; 

/** This examples demonstrates how a remote command can be executed. */ 
public class sshBuddy { 

    public static void main(String... args) 
      throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     ssh.loadKnownHosts(); 
     //ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d"); 

     ssh.connect("myserver"); 
     try { 
      ssh.authPublickey(System.getProperty("myusername")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 

} 

任何幫助,將不勝感激,謝謝!

回答

1

試試這個

public class sshBuddy { 

    public static void main(String... args) 
      throws IOException { 
     final SSHClient ssh = new SSHClient(); 
     //ssh.loadKnownHosts(); 
     ssh.addHostKeyVerifier("5f:d6:94:00:9e:ec:7e:34:6d:d0:d3:76:df:5e:dd:3d"); 

     ssh.connect("myserver"); 
     try { 
      ssh.authPublickey(System.getProperty("myusername")); 
      final Session session = ssh.startSession(); 
      try { 
       final Command cmd = session.exec("ping -c 1 google.com"); 
       System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
       cmd.join(5, TimeUnit.SECONDS); 
       System.out.println("\n** exit status: " + cmd.getExitStatus()); 
      } finally { 
       session.close(); 
      } 
     } finally { 
      ssh.disconnect(); 
     } 
    } 
} 

取消對addHostKeyVerifier和評論loadKnownHosts。它應該工作。

8

只是試試這個

ssh.addHostKeyVerifier(new PromiscuousVerifier()); 

這應該工作

+2

這不是一個解決方案。你基本上是說要禁用主機密鑰驗證。 – Matiss