从 .pub 格式的 public 密钥创建 JSch HostKey 实例
Creating JSch HostKey instance from a public key in .pub format
我正在尝试使用 JSch 将文件从 Windows 机器发送到 Linux 机器。因此,我将主机 public 密钥从 Linux 机器复制到我的 Windows 机器并将密钥添加到我的 HostKeyRepository
。但出于某种原因,我得到 "invalid key type" 异常。这是我的代码:
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
文件的格式为:
<type> <base64-encoded-public-key> <comment>
进入 HostKey
constructor 的只是 public 关键部分,以二进制形式(不是 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
:
<hostname> <type> <base64-encoded-public-key> [comment]
请注意,如果您知道要解析文件的一种特定格式,则您的实现不必像他们那样复杂。
所以从 File
读取行到字符串,删除 <type>
和 <comment>
并使用这个表达式(取自 KnownHosts.setKnownHosts
,关键是 <base64-encoded-public-key>
部分):
Util.fromBase64(Util.str2byte(key), 0, key.length())
我正在尝试使用 JSch 将文件从 Windows 机器发送到 Linux 机器。因此,我将主机 public 密钥从 Linux 机器复制到我的 Windows 机器并将密钥添加到我的 HostKeyRepository
。但出于某种原因,我得到 "invalid key type" 异常。这是我的代码:
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
文件的格式为:
<type> <base64-encoded-public-key> <comment>
进入 HostKey
constructor 的只是 public 关键部分,以二进制形式(不是 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
:
<hostname> <type> <base64-encoded-public-key> [comment]
请注意,如果您知道要解析文件的一种特定格式,则您的实现不必像他们那样复杂。
所以从 File
读取行到字符串,删除 <type>
和 <comment>
并使用这个表达式(取自 KnownHosts.setKnownHosts
,关键是 <base64-encoded-public-key>
部分):
Util.fromBase64(Util.str2byte(key), 0, key.length())