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中终端不是交互式的,因此您不能接受未 seeing的公钥主机密钥 - 这可能没问题,但用户可能在失败时不知道该怎么办。

将gitlibs迁移到通过shell调用git可以帮助解决这些问题,如果仍然与Windows支持兼容。(这是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
user=> (KeyPair/load (JSch.) "/tmp/foo")
执行错误(JSchException)在com.jcraft.jsch.KeyPair/load(KeyPair.java:664)。
invalid privatekey: [B@485e36bc
用户=> (在JSch中使用"keypair/load"在/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下时,任何`clojure`或`clj`命令都会因构建classpath错误而终止

`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月开始困扰更多的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 报告)
...