从.pub格式的公钥创建JSch HostKey实例

我正在尝试使用JSch将文件从Windows机器发送到Linux机器。 因此我将主机公钥从Linux机器复制到我的Windows机器并将密钥添加到我的HostKeyRepository 。 但由于某种原因,我得到“无效密钥类型”exception。 这是我的代码:

 HostKeyRepository repo = jsch.getHostKeyRepository(); File file = new File("D:\\Uni\\Arbeit\\ssh_host_rsa_key.pub"); byte[] HK = Files.readAllBytes(file.toPath()); Session session=jsch.getSession(user, host, 22); session.setPassword(password); HostKey hk = new HostKey(null, HK); repo.add(hk, null); session.connect(); 

.pub文件的格式为:

    

进入HostKey构造函数的只是公钥部分,采用二进制forms(不是base64编码的)。

使用JSch Util.fromBase64()base64-encoded-public-key部分转换为byte[]

 static byte[] fromBase64(byte[] buf, int start, int length) 

您还可以在KnownHosts.setKnownHosts(InputStream input)检查known_hosts文件解析的JSch实现。

known_hosts文件的格式与.pub文件类似,只是前面有一个额外的hostname部分,通常不包括comment

    [comment] 

请注意,如果您知道要解析文件的一种特定格式,那么您的实现不必像他们那样复杂。