2024 年 Clojure 状态调查!中分享您的看法。

欢迎!请参阅关于页面以了解更多有关本网站的信息。

0 投票
tools.deps

JSCH 存在处理加密(受密码保护)公钥的公钥认证问题。为了解决这个问题,~/.ssh/config 中不能包含 JSCH 决定要读取的任何部分的 IdentityFile。要查看问题的完整描述、堆栈跟踪和一些解决方案,请参阅此 gist:https://gist.github.com/niclasnilsson/038f20bee1bd19e970d59ba35732e262

注意:该问题并非特异性于 tools.deps,而是在使用它时发现的,因此 Alex Miller 请求添加一个问题以跟踪该问题。

3 个答案

0 投票

评论由:alexmiller

感谢您追踪所有这些并记录下来...

0 投票

评论由:manderson202

我在发现这个解决方案之前遇到了这个问题,并为它提交了一个补丁。如 gist 中所述,JSCH 不了解 jsch-agent-proxy,因此它会像平时一样尝试解析密钥。在正常执行过程中,它在遇到加密(受密码保护)的私钥时会期望一个 UserInfo 实现。如果没有找到 UserInfo 实现,它将抛出异常,不给 jsch-agent-proxy 拉取密钥的机会。以下是来自 com.jcraft.jsch.UserAuthPublicKey#start 的代码片段,行 118-130

`java
if((identity.isEncrypted() && passphrase==null)){
if(userinfo==null) throw new JSchException("USERAUTH fail");
if(identity.isEncrypted() &&

 !userinfo.promptPassphrase("Passphrase for "+identity.getName())){
throw new JSchAuthCancelException("publickey");
//throw new JSchException("USERAUTH cancel");
//break;

}
String _passphrase=userinfo.getPassphrase();
如果(_passphrase!=null){

passphrase=Util.str2byte(_passphrase);

}
}
`

解决方案是在Session上设置一个占位符UserInfo实现,这样就不会抛出上述异常,并且ssh-agent可以处理向JSCH返回密钥。有了这个补丁,您不需要执行从~/.ssh/config文件中删除IdentityFile属性的解决方案。

补丁已附带(今天:2018-11-27)并称为tdeps-49-fix.patch。如果您有任何问题,请告知。

0 投票
参考:https://clojure.atlassian.net/browse/TDEPS-49(由alex+import报告)
...