我正在尝试使用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();
答案 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]
请注意,如果您知道要解析文件的一种特定格式,那么您的实现不必像他们那样复杂。