java – JSCH addIdentity公钥参数没有区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – JSCH addIdentity公钥参数没有区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1618字,纯文字阅读大概需要3分钟。
内容图文
public class FTP {
public static void main(String args[]){
JSch jsch = new JSch();
jsch.setKnownHosts("./known_hosts");
Path privateKeyPath = Paths.get("./id_dsa");
byte[] privateKey = Files.readAllBytes(privateKeyPath);
Path publicKeyPath = Paths.get("./id_dsa.pub");
byte[] publicKey = Files.readAllBytes(publicKeyPath);
// Either of the lines below work... Why?
// jsch.addIdentity("", privateKey, publicKey, null);
// or
jsch.addIdentity("", privateKey, null, null);
Session session = jsch.getSession("USER", "myHost.com", 22);
session.connect();
}
}
将publicKey设置为null,没有区别,我可以连接任何一种方式.这是为什么?
看起来publicKey没有被使用,为什么首先将它传递给addIdentity?
解决方法:
它是(某些)加密私钥的优化.您没有发现任何差异,因为您使用了未加密的私钥.
如果你给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格式,它可以做同样的事情,因此你可以将单个文件作为私钥而不是公钥.
内容总结
以上是互联网集市为您收集整理的java – JSCH addIdentity公钥参数没有区别全部内容,希望文章能够帮你解决java – JSCH addIdentity公钥参数没有区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。