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}}错误


输入以下命令:
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) 处。
无效的私钥:[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 测试版 2,tools.deps 无法访问我的私有的 `:git/url` 库。

我有一个在 macOS 10.12 下生成的 `id_rsa`,在 macOS 10.14 和 clojure cli 的 1.10.1.447 版本下可以成功拉取私有 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:无效的私钥:[B@3d3a1903`

我猜测这将在 9 月 10.15 发布时开始影响更多使用 Mac 的用户。我的解决方案是手动将 `~/.gitlibs` 安排成与我旧的 10.14 机器相匹配,并通过 bash 脚本拉取和安装那里。
+1

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

链接

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 报告)
...