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所做的,外壳调用。)它还会缓解用户报告的许多暂时的、没有相关票据的问题。

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"}}时会出现{{"无效的私钥"}}错误


$ 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 投票
by
_由:ryano发表的评论

可能与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: 无效的私钥:[B@3d3a1903`

我猜测这将在9月10.15发布后更多影响到我们这些Mac用户。我的解决方案是手动将`~/.gitlibs`整理成与我的旧10.14机器匹配,并通过bash脚本来拉取/打包。
+1 投票
by

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

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

0
by

由:co1infleming发表的评论

如果我们走这条路,需要考虑到的一点是对像Cursive(见TDEPS-81)这样的工具需要一个进度监控器。我不知道当调用git shell时这是否可行——我相信JGit提供了一些可以钩入的东西。

0
by

由:ryan发表的评论

哦,顺便说一下,密钥有密码,所以我正在使用ssh-agent。`ssh-add -l`看起来好,`SSH_AUTH_SOCK`也在环境中设置。

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