请在 2024年Clojure调查问卷 中分享您的看法!

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

+1
tools.deps

目前使用JGit+JSch出现许多问题

尚未支持通过HTTPS进行身份验证,这是一种私有仓库中广泛使用的非常常见的传输方式。Git(主线二进制版)使用“凭证辅助程序”作为身份验证预言机。
通过JSch的SSH身份验证可用性低,不支持一些现代的KEX方法
神秘的 .ssh/config 选项可能导致克隆失败,因为底层Java SSH库(JSch)误读 .ssh/config 文件
通过ssh-agent支持通过ed25519身份密钥,但不能通过 ~/.ssh/config条目。当存在Agent和ssh/config时,JSch会变得混乱
在Clojure中终端不是交互式的,因此您不能接受未看到的公共主机密钥 - 这可能是正确的,但用户可能在失败时不知道该怎么办。

如果与Windows支持兼容,将gitlibs移植到shell out to git将有助于解决所有这些问题。(这是Python和Go所做的那样,通过shell out)。这将也有助于减轻许多用户报告的暂时性问题,这些问题没有关联的项目门票。

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
user=> (KeyPair/load (JSch.) "/tmp/foo")
执行错误(JSchException)在 com.jcraft.jsch.KeyPair/load (KeyPair.java:664)。
invalid privatekey: [B@485e36bc
user=> (KeyPair/load (JSch.) "/tmp/bar")
#object[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 下时,任何 `clojure` 或 `clj` 命令都会在构建类路径时出错而失败

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

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

`org.eclipse.jgit.api.errors.TransportException: [email protected]:opengb/spork.git: invalid privatekey: [B@3d3a1903`

我认为这个错误将会在 9 月 10.15 版本的发布时影响更多的 Mac 用户。我的解决办法是手动调整 `~/.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 已在 env 中设置。

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