Ken*_*ici 5 windows git ssh jenkins
问题陈述
我正在寻找有关设置 SSH 密钥以连接到我们的 Jenkins 主站和从站上的 Git 的正确方法的建议。这里还有其他关于 Git、Jenkins 和 SSH 的类似问题(最接近的是this),但似乎没有人通过有关正确方法的具体建议来回答这个问题。
背景与测试
我正在使用内部部署的 GitLab 研究 Jenkins 的原型实现。我们在 Jenkins 方面有几年的经验,但将它与 Git 集成对我们来说是新的。这也是我们第一次配置任何从节点。在这一点上,我们只是试图让简单的轮询工作,没有花哨的推送通知。
主 Jenkins 实例在 Linux ( Red Hat Linux 6) 上运行。目前有 3 个从属服务器:一台其他 Red Hat Linux 服务器和两台运行 Windows Server 2012 R2 的服务器。Windows 服务器上的 Jenkins slave 作为 Windows 服务运行。主节点和所有从节点都运行最新的 Git v2.10.0(64 位)。
我们打算使用 SSH 访问 GitLab。我创建了一个带有密码的 SSH 密钥,并将其保存在主服务器的磁盘上。然后,我在 GitLab 中将公钥配置为我的测试项目的部署密钥。最后,我在 Jenkins 中添加了一个新凭证。
在 Jenkins 的第一个测试项目中,我配置了 GitLab 存储库 URL 并选择了上面创建的 Jenkins 凭据。然后我在master上构建了这个项目。Jenkins 与 GitLab 建立了 SSH 连接,没有问题并且构建成功。然后我强制构建到 Linux 从设备,结果相同。
不幸的是,当强制构建到任一 Windows 从属时,构建不像在 Linux 上那样工作。
Windows 上的错误
(根据进一步研究从我的原始问题中编辑。)
我最初收到此错误,这阻止了任何 SSH 连接的发生:
stderr: Unable to negotiate with xxxx port 22: no matching host key type found. Their offer: ssh-dss
Run Code Online (Sandbox Code Playgroud)
这与 SSH 级别的协商有关。ssh-dss默认情况下不会使用与 Git 捆绑的较新的 SSH 客户端,这就是我相对较旧的 SSH 服务器能够提供的所有内容。
为了解决这个问题,我添加了%HOME%/.ssh/config包含以下行,如 OpenSSH 在Legacy Options下所记录的:
Host xxxx
HostKeyAlgorithms +ssh-dss
Run Code Online (Sandbox Code Playgroud)
这会强制 Git SSH 客户端接受ssh-dss连接。
大约在同一时间,我正在努力解决如何从与 Git 捆绑的 Windows SSH 客户端中获取详细的 SSH 输出,因为通常的设置建议GIT_SSH='ssh -vvv'不适用于 Windows。基于一个Ask Ubuntu问题和一个类似的Stack Overflow问题,我最终得到了这个%HOME%/.ssh/config:
Host xxxx
HostKeyAlgorithms +ssh-dss
LogLevel DEBUG3
Run Code Online (Sandbox Code Playgroud)
调试输出可用让我更好地了解正在发生的事情。最后,我可以在 Windows 上成功构建,但前提是我使用的 SSH 密钥没有 passphrase。提示在调试输出中:
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password,hostbased
debug3: start over, passed a different list publickey,gssapi-keyex,gssapi-with-mic,password,hostbased
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: C:\\Users\\JENKIN~1.TMS\\AppData\\Local\\Temp\\ssh2489775972592020656key
debug1: read_passphrase: can't open /dev/tty: No such device or address
debug2: no passphrase given, try next key
debug2: we did not send a packet, disable method
Run Code Online (Sandbox Code Playgroud)
出于某种原因,Jenkins 无法在 Windows 上使用正确的密码设置 SSH 密钥,而在 Linux 上它可以正常工作。不幸的是,Jenkins 不会从 SSH 转储调试输出,除非命令失败,所以我无法确切地看到 Linux 构建的不同之处。
问题
我试图这样做的(可能是天真的)方式显然适用于 Linux,但不适用于 Windows。它应该在Windows上工作吗?
这是针对我的情况管理 SSH 密钥的正确方法,还是有更好的方法?我希望避免随着这个基础设施的增长而不得不为每个从站管理磁盘上的关键文件。
假设这是使用的正确机制,有人可以指出我的说明或明确解释如何使其工作的答案吗?我觉得我一定错过了一些明显的东西......?
| 归档时间: |
|
| 查看次数: |
1992 次 |
| 最近记录: |