Java SSHJ - 在验证者

时间:2016-12-24 01:39:13

标签: java ssh sshj

我正在使用SSHJ执行远程命令,当主机位于SSH 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;
    }

}

1 个答案:

答案 0 :(得分: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的工作方式。