在客户端 (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 进程(及其作业)在哪个帐户下以及使用什么环境变量运行。