JSch和sharpSSH的关键文件格式是什么?

时间:2011-11-13 21:31:04

标签: c# java sftp jsch sharpssh

我正在考虑使用JSch库(或实际上是sharpSSH C#端口)为SFTP设置公钥客户端和服务器身份验证。遗憾的是,我找不到关键加载函数使用的文件格式的任何文档:

jsch.addIdentity(filename, passphrase);
jsch.setKnownHosts(filename);

私钥和已知主机文件使用什么文件格式?

1 个答案:

答案 0 :(得分:8)

JSch使用OpenSSH 密钥文件格式(公钥和私钥)。我没有找到这种格式的规范,但您可以使用OpenSSH的ssh-keygen工具将密钥从/转换为其他格式(而Google将显示其他转换/更多格式的工具)。

更新:在询问OpenSSH邮件列表并阅读一些RFC之后,看起来OpenSSH的公钥文件包含(对于版本2密钥)RFC 4253 (section 6.6)中指定的公钥,只是用它包围一个base64(并且键类型作为前缀,注释字段作为后缀)。我还没有找到私钥文件的规范。

不幸的是,JSch的官方文档几乎不存在,但我确实为它写了一些Javadocs。 (虽然似乎没有提到密钥文件格式......我将不得不解决这个问题。) JSch Wiki中还有Manual,其中包含一个关于public key authentication的页面(还没有提到关键格式: - /)。

已知主机文件的格式与OpenSSH客户端的相应文件格式相同。它的格式在OpenSSH's sshd manual page SSH知道主机文件格式部分进行了解释:

  

这些文件中的每一行都包含以下字段:标记     (可选),主机名,位,指数,模数,注释。这些领域是     用空格分隔。

这实际上只适用于SSH 1 RSA密钥。对于SSH 2密钥,您有一个类型标识符(ecdsa-sha2-nistp256ecdsa-sha2-nistp384ecdsa-sha2-nistp521ssh-dssssh-rsa),然后是base-64编码的密钥形成。 (有关授权密钥文件,请参阅同一手册页中的一点内容)。 (我认为JSch只支持DSA和RSA密钥格式,没有ECDSA。)

  

请注意,这些文件中的行通常是数百个字符      很长,你肯定不想手动输入主机键。      相反,通过脚本,ssh-keyscan(1)或通过获取来生成它们      /etc/ssh/ssh_host_key.pub并在前面添加主机名。      ssh-keygen(1)还提供了一些基本的自动编辑功能      〜/ .ssh / known_hosts包括删除与主机名匹配的主机      将所有主机名转换为其哈希表示。