2016-12-24 63 views
2

我使用SSHJ執行遠程命令,當主機位於SSH known_hosts文件中時,我可以成功執行該命令。但是,如果主機不在此文件中,那麼我想讓用戶選擇添加它。Java SSHJ - 在驗證程序中添加到known_hosts文件

我相信要做到這一點的方法是創建一個自定義HostKeyVerifier(如下所示的模板)。不過,我正努力將PublicKey轉換爲AAAAB3Nz...cTqGvaDhgtAhw==格式,以使我能夠將主機附加到known_hosts文件中。任何人都可以將我指向正確的方向嗎?

public class CustomVerifier implements HostKeyVerifier { 

    public boolean verify(String hostname, int port, PublicKey key) { 

     System.out.println(key);  
     System.out.println(KeyType.fromKey(key)); 
     System.out.println(key.getAlgorithm()); 
     System.out.println(key.getEncoded()); 
     System.out.println(key.getFormat()); 

     return true; 
    } 

} 

回答

2

讀取來自known_hosts關鍵是使用下面的代碼完成(見:OpenSSHKnownHosts.java線213):

key = new Buffer.PlainBuffer(Base64.decode(sKey)).readPublicKey(); 

這意味着,如果你有鑰匙,你需要做反向:

keyString = Base64.encodeBytes(new Buffer.PlainBuffer().putPublicKey(key).getCompactData()); 

甚至更​​好,你可以擴展OpenSSHKnownHosts類並重寫hostKeyUnverifiableAction,類似於如何ConsoleKnownHostsVerifier做到了。