它是(某些)加密私钥的优化.您没有发现任何差异,因为您使用了未加密的私钥.
如果你给jsch一个OpenSSL格式的加密私钥,并且没有预先提供密码来解密它,但确实提供了公钥(永远不会加密),并且密钥对成为认证的下一个选择,jsch使用publickey探测服务器以确定服务器是否可能使用此密钥接受auth.如果是这样,jsch必须提示密码短语解密私钥以实际执行身份验证; 如果没有,它会跳过提示并转到下一个可能性,如果有的话.查看源代码com.jcraft.jsch.UserAuthPublicKey.java
.
OpenSSH客户端ssh
几乎完全相同.如果您(作为选项,在配置中或默认情况下)提供OpenSSL格式加密的私钥,并且它找到匹配的公钥,它首先进行探测,并仅在密钥可用时提示密码才能解密.ssh
不允许提前指定密码Jsch.addIdentity
,但它可以使用ssh-agent
完成相同操作的进程(或替代).
6.5之后的OpenSSH还支持创建的"新格式"密钥文件ssh-keygen -o
,可以在一个文件中使用加密私钥和未加密的publickey,避免单独处理publickey.Jsch不支持这种格式,但它确实支持PuTTY的PPK格式,它可以做同样的事情,因此你可以将单个文件作为私钥而不是公钥.
它是(某些)加密私钥的优化.您没有发现任何差异,因为您使用了未加密的私钥.
如果你给jsch一个OpenSSL格式的加密私钥,并且没有预先提供密码来解密它,但确实提供了公钥(永远不会加密),并且密钥对成为认证的下一个选择,jsch使用publickey探测服务器以确定服务器是否可能使用此密钥接受auth.如果是这样,jsch必须提示密码短语解密私钥以实际执行身份验证; 如果没有,它会跳过提示并转到下一个可能性,如果有的话.查看源代码com.jcraft.jsch.UserAuthPublicKey.java
.
OpenSSH客户端ssh
几乎完全相同.如果您(作为选项,在配置中或默认情况下)提供OpenSSL格式加密的私钥,并且它找到匹配的公钥,它首先进行探测,并仅在密钥可用时提示密码才能解密.ssh
不允许提前指定密码Jsch.addIdentity
,但它可以使用ssh-agent
完成相同操作的进程(或替代).
6.5之后的OpenSSH还支持创建的"新格式"密钥文件ssh-keygen -o
,可以在一个文件中使用加密私钥和未加密的publickey,避免单独处理publickey.Jsch不支持这种格式,但它确实支持PuTTY的PPK格式,它可以做同样的事情,因此你可以将单个文件作为私钥而不是公钥.