我正在使用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;
}
}
答案 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
的工作方式。