JSch和sharpSSH的关键文件格式是什么?
本文关键字:文件 格式 是什么 sharpSSH JSch | 更新日期: 2023-09-27 18:14:33
我正在考虑使用JSch库(或者实际上是它的sharpSSH c#端口)为SFTP设置公钥客户端和服务器身份验证。不幸的是,我找不到关键加载函数使用的文件格式的任何文档:
jsch.addIdentity(filename, passphrase);
jsch.setKnownHosts(filename);
私钥和已知主机文件使用什么文件格式?
JSch使用OpenSSH 密钥文件格式(公钥和私钥)。我没有找到这种格式的规范,但是您可以使用OpenSSH的ssh-keygen工具将密钥从/转换为其他格式(Google将显示从/转换为更多格式的其他工具)。
Update:在询问了OpenSSH邮件列表并阅读了一些RFC之后,看起来OpenSSH的公钥文件包含(对于版本2的密钥)RFC 4253(章节6.6)中指定的公钥,只是用base64包装它(密钥类型作为前缀,注释字段作为后缀)。我仍然没有找到私钥文件的规范。
不幸的是,JSch的官方文档几乎不存在,但我确实为它写了一些Javadocs。(虽然它似乎没有提到关键文件格式…我必须解决这个问题。)在JSch Wiki中也有手册,包含一个关于公钥身份验证的页面(也没有提到密钥格式:-/)。
已知的hosts文件与OpenSSH客户端对应的文件格式相同。它的格式在OpenSSH的sshd手册页中有解释,SSH已知主机文件格式:
这些文件中的每一行都包含以下字段(可选),主机名,位,指数,模数,注释。这些领域是用空格分隔。
这实际上只适用于SSH 1 RSA密钥。对于SSH 2密钥,您有一个类型标识符(ecdsa-sha2-nistp256
, ecdsa-sha2-nistp384
, ecdsa-sha2-nistp521
, ssh-dss
或ssh-rsa
),然后是base-64编码形式的密钥。(有关授权密钥文件,请参阅同一手册页的上方部分)。(我认为JSch只支持DSA和RSA密钥格式,不支持ECDSA)
注意,这些文件中的行通常有数百个字符很长,而且您肯定不想手动输入主机键。而是通过脚本生成它们,ssh-keyscan(1)或使用/etc/ssh/ssh_host_key。Pub并在前面添加主机名。Ssh-keygen(1)还提供了一些基本的自动编辑~/。Ssh/known_hosts包括删除与主机名匹配的主机将所有主机名转换为它们的散列表示。