2

我正在使用 SSHJ 执行远程命令,当主机在 SSHknown_hosts文件中时,我可以成功执行该命令。但是,如果主机不在此文件中,那么我希望用户可以选择添加它。

我相信这样做的方法是创建一个自定义HostKeyVerifier(如下所示的模板)。但是,我正在努力将其转换PublicKeyAAAAB3Nz...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;
    }

}
4

1 回答 1

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它的做法。

于 2017-01-18T11:01:16.850 回答