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

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

+1
tools.deps

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

https与认证尚不支持,而这是一种私有仓库中非常常见的传输方式。Git(主线二进制文件)使用“凭据帮助器”作为认证或acles。
通过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就是这样做的,外壳调用。) 这还将减轻许多用户报告的暂时性问题,这些问题没有关联的票据。

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)。
无效私钥:[B@485e36bc
用户=> (加载密钥对 (JSch.) "/tmp/bar")
#对象[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 / 1.10.1.447的clojure cli下提取私有git库。

当我使用该密钥与macOS 10.15b2一起时,任何`clojure`或`clj`命令都会因为构建类路径的错误而失败

`org.eclipse.jgit.api.errors.TransportException: [email protected]:opengb/spork.git: 用户身份验证失败`

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

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

我猜测这个问题将在9月macOS 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`已经在环境中设置了。

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