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

时间:2015-04-13 11:36:29

标签: java jsch public-key

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

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();

1 个答案:

答案 0 :(得分:3)

.pub文件的格式为:

<type> <base64-encoded-public-key> <comment>

HostKey constructor的内容仅为公钥部分,采用二进制形式(非base64编码)。

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

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

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

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

<hostname> <type> <base64-encoded-public-key> [comment]

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