3

我正在使用 stash 作为 git 存储库管理器。stash 使您能够为每个尝试连接并从中克隆的用户添加 ssh 密钥。我已经为所有 unix 用户配置了它,但是 windows 给我带来了困难。Windows 从机(2008 R2 服务器)上的 git clone 进程永远挂起,因为它可能找不到保存密钥的 .ssh 目录。从 cli 手动运行相同的命令时,它工作正常。

我尝试了各种配置,使用 %HOME% 环境变量等。它根本不适合我。在这个问题上花了一天多的时间,但没有任何效果。

任何帮助表示赞赏。

4

1 回答 1

6

在客户端 (Jenkins),您需要检查运行 Jenkins 作业的用户是否知道%HOME%环境变量:它需要它的 %HOME%.ssh\id_rsa.pub 公共 ssh 密钥。
请参阅“ Jenkins - Git - 权限被拒绝(公钥)

在服务器上(来自 Atlassian 的 Stash),您需要确保其中~stachAadminAccount\.ssh\authorized_keys包含您的公钥。

除此之外,您需要调试 ssh 连接:

ssh -vvvT ssh://git@stash.atlassian.com:7999/path/to/repo.git

(替换git为用于管理 Stash 的帐户,并替换stash.atlassian.com:7999为您的server:port


1)我已明确添加%HOME%到从属上的系统环境变量,只是为了确保它被注入。它可能不需要,但我添加它是为了看看它是否会产生影响

需要:ssh在下查找密钥(私有和公共)%HOME%/.ssh

2) 我从来不用在 stash 下弄乱 ssh 密钥。事实上,所有的 stash 用户都是 stash 内部的,不是/etc/password文件或类似文件的一部分,所以authorized_keys无论如何都不存在文件 – user1577236 7 小时前

a/ “不是/etc/password文件的一部分”:当然这些没有在 /etc/password 中注册:我们在这里不是在谈论用户帐户,而是关于 ssh 密钥允许用户作为一个唯一的用户帐户打开一个安全的 shell 会话( stash admin account):所有 ssh 命令将在同一个帐户下执行。

b/“无authorized_keys文件”:当然应该存在:当您报告使用 ssh 协议的克隆工作时,它涉及纯 ssh 通信,这意味着~/.ssh/authorized_keys.
该文件不存在的唯一方法是,如果 Stash 启动自己的 ssh 守护程序,配置为在另一个文件/公钥源中查找密钥。

关于 2 - 您在 stash 中所做的是将公钥添加到每个用户的 stash 中的空间位置。

可能是这样,但 Stash 应该只是 ssh 的一个不错的前端。它背后的所有 ssh 机制仍然应该更新。

3)如前所述,使用 git ssh 协议从命令行运行 git clone 命令可以正常工作,那么我应该在调试会话中寻找什么?

您必须定义一个 Jenkins 作业,将ssh -vvvT其作为其唯一命令:这样,您会从 Jenkins 的角度看到什么不起作用。

我很想调试 Jenkins 进程并看看它在 ssh 会话期间做了什么,但我不知道该怎么做(还......)。大约两周前才开始与 Jenkins 合作。

在 Windows 上,进程浏览器至少是第一步,以便查看 Jenkins 进程(及其作业)在哪个帐户下以及使用什么环境变量运行。

于 2012-08-07T15:23:51.517 回答