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

欢迎!请参阅关于页面以了解更多有关此功能的信息。

+1
tools.deps

目前使用JGit+JSch存在许多问题

不支持通过HTTPS进行认证,这是私有仓库中非常常用的传输方式。Git(主线二进制)使用“凭证辅助器”作为认证预言者。
通过JSch进行SSH认证可用性低,不支持一些现代KEX方法
难以理解的.ssh/config选项可能会破坏克隆,因为底层java ssh库(JSch)误读了.ssh/config文件
通过ssh-agent支持的ed25519身份密钥,但不是通过~/.ssh/config条目。当存在代理和ssh/config时,JSch会感到困惑
在Clojure中,终端不是交互式的,因此您无法接受未见过的公共宿主密钥 - 这可能没问题,但是当它失败时,用户可能不知道该怎么做。

如果仍然与Windows支持兼容,则将gitlibs移植到通过shell调用git将有助于解决所有这些问题(这是Python和Go所做的事情,即shell调用)。它还将缓解许多用户报告的暂时性问题,这些问题没有关联的需求票据。

TDEPS-49
TDEPS-33
TDEPS-31

提出的补丁(与tools.gitlibs兼容的API)
https://github.com/ghadishayban/tools.gitlibs/pull/1

6个答案

+1
_评论由:mfikes_制作

如果尚未捕获,则还有一个理由放弃JGit+JSch:JSch不能读取新的OpenSSH密钥格式,默认情况下在macOS上使用。

以下是一个例子


$ ssh-keygen -f /tmp/foo


这创建了一个带标题的密钥


-----BEGIN OPENSSH PRIVATE KEY-----


如果您做的是


$ ssh-keygen -m PEM -f /tmp/bar


那么您将得到一个带常规标题(和密钥格式)的密钥


-----BEGIN RSA PRIVATE KEY-----


为了说明最新JSch不能读取此新密钥类型,请注意尝试读取{{"/tmp/foo"}}时出现的{{invalid privatekey}}错误


$ clj -Sdeps '{:deps {com.jcraft/jsch {:mvn/version "0.1.55"}}}'
Clojure 1.10.0
user=> (import (com.jcraft.jsch JSch KeyPair))
com.jcraft.jsch.KeyPair
用户=>(KeyPair加载(JSch)"/tmp/foo")
执行出错(JSchException),在com.jcraft.jsch.KeyPair加载(KeyPair.java:664)。
无效的私钥:[B@485e36bc
用户=>(KeyPair加载(JSch)"/tmp/bar")
#对象[com.jcraft.jsch.KeyPairRSA 0x38f116f6 "com.jcraft.jsch.KeyPairRSA@38f116f6"]
+1
_评论者为:ryan_

可能与macOS 10.15也有相关的问题。我正在运行10.15 beta 2,tools.deps无法访问我的私有`:git/url`库。

我有一个在macOS 10.12下生成的`id_rsa`,可以在macOS 10.14 / 1.10.1.447的clojure cli下成功拉取私有git依赖。

当我使用在macOS 10.15b2下生成的`id_rsa`时,任何`clojure`或`clj`命令都会在构造classpath时出错而死亡。

`org.eclipse.jgit.api.errors.TransportException: [email protected]:opengb/spork.git: USERAUTH失败`

如果我用10.15下生成的`id_rsa`,错误是:

`org.eclipse.jgit.api.errors.TransportException: [email protected]:opengb/spork.git: 无效的私钥:[B@3d3a1903`

我猜测这将从九月初开始影响更多的Mac用户及10.15的发布。我的解决方案是手动将`~/.gitlibs`配置成与我的旧的10.14机器相匹配,并用bash脚本来拉取和打包。
+1

最近版本的JGit不再使用JSch,已经转向使用Apache MINA sshd。现在应该支持新的密钥格式等。

https://wiki.eclipse.org/JGit/New_and_Noteworthy/5.2

0

评论者为:colinfleming

如果我们要走这条路,我想要考虑到的一点是为像Cursive这样的工具提供进度监视器的需要(见TDEPS-81)。我不知道在将git外部调用时是否可行 - 我相信JGit确实提供了一个可以被集成的东西。

0

评论者为:ryan

哦,顺便说一下,密钥还有密码短语,所以我正在使用 ssh-agent。 ssh-add -l看起来不错,并且SSH_AUTH_SOCK已经在环境变量中设置了。

0
参考::https://clojure.atlassian.net/browse/TDEPS-91(由gshayban报告)
...