2024 Clojure状态调查!分享您的想法。

欢迎!请查看关于页面以获得更多关于此如何工作的信息。

0
工具依赖

JSch 在处理加密(受密码保护的)密钥的公钥认证方面存在问题。为了避免这个问题,~/.ssh/config 中任何 JSch 决定读取的节都不能包含 IdentityFile。要查看问题的完整描述、堆栈跟踪和几个解决方案,请参阅此gist

注意:这个问题不仅针对 tools.deps,而是在使用 tools.deps 时发现的,因此 Alex Miller 建议添加一个问题,以便跟踪问题。

3 个回答

0

评论人:alexmiller

感谢您追踪并记录所有这些问题...

0

评论人:manderson202

我在发现这个解决方案之前遇到了这个问题,并找到了根本原因,所以我想提交一个补丁。如上文中的金丝雀所示,JSCH 不了解 jsch-agent-proxy,因此它试图以常规方式解析密钥。在常规执行时,当它遇到加密(受密码保护的)私钥时,它期望有 UserInfo 实现。如果不存在 UserInfo 实现,则抛出异常,不给 jsch-agent-proxy 机会从 ssh-agent 拖取密钥。以下是 com.jcraft.jsch.UserAuthPublicKey#start 中的 snippet,从第 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();
if(_passphrase!=null){

passphrase=Util.str2byte(_passphrase);

}
}
`

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

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

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