- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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 格式的加密私钥,并且不预先提供密码来解密它,而是提供公钥(从不加密),那么该 key 对将成为下一个选择身份验证,jsch 使用公钥探测服务器以确定服务器是否可能接受使用此 key 的身份验证。如果是这样,jsch 必须提示输入密码来解密私钥以实际执行身份验证;如果不是,它会跳过提示并转到下一个可能性(如果有的话)。请参阅 com.jcraft.jsch.UserAuthPublicKey.java
的源代码。
OpenSSH 客户端 ssh
做几乎相同的事情。如果你给它(作为一个选项,在配置中或默认情况下)一个 OpenSSL 格式的加密私钥,并且它找到一个匹配的公钥,它首先探测,并提示输入密码,只有当这个 key 可用时才解密。 ssh
不允许像 Jsch.addIdentity
那样预先指定密码,但它可以使用 ssh-agent
进程(或替代进程)来完成同样的事情。
从 6.5 开始,OpenSSH 还支持使用 ssh-keygen -o
创建的“新格式” key 文件,它可以在一个文件中包含加密的私钥和未加密的公钥,避免单独处理公钥。 Jsch 不(还?)支持这种格式,但它确实支持 PuTTY 的 PPK 格式,它做同样的事情,因此您提供单个文件作为私钥而不是公钥。
关于java - JSCH addIdentity 公钥参数没有区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41622662/
有很多关于此的示例,但没有一个示例说明如何将字符串形式的 .ppk 公共(public)/私有(private)文件组件转换为 byte[] 并使用使用 JSch.addIdentity(String
public class FTP { public static void main(String args[]){ JSch jsch = new JSch(); jsch.se
在 ASP.NET Core 中,您可以添加各种识别服务:AddDefaultIdentity、AddIdentity 和 AddIdentityCore。 AddIdentity 和 AddIden
我有一种情况,我想将 ASP.NET Identity 用户(数据库优先)的密码长度更改为 4。经过大量研究,我发现我可以从启动类开始使用: public void ConfigureServices
我指的是 public void addIdentity(String name, byte[] prvkey,
这个问题在这里已经有了答案: JSch to add private key from a string (1 个回答) 关闭 4 年前。 我需要从 hadoop 集群连接到 sftp 服务器。我想
我一直在使用 JSch 与 OpenSSH 服务器建立 SFTP 连接,在此过程中,当我尝试以 URI 的形式添加私钥作为身份时,私钥无法被识别。 当我尝试从浏览器运行该 URL 时,它工作正常。 我
我有一个简单的 WebApi 项目,它使用 IdentityServer4.AccessTokenValidation验证 IdentityServer4 发出的 token 服务器在开发地址:htt
我正在尝试将 facebook 登录添加到我的 .NET Core 2.1 网站 我正在关注this ,指南,更具体,this (for facebook login) 将以下行添加到startup.
使用 Identity Server 4、.NetCore2.0 和 MS Identity 与隐式流/授权类型; 我不清楚以下各项的责任,因为每一项都特别涉及验证/授权不记名 token 。 我有以
我是一名优秀的程序员,十分优秀!