如何为詹金斯设置 ssh 密钥以通过 ssh 发布
Posted
技术标签:
【中文标题】如何为詹金斯设置 ssh 密钥以通过 ssh 发布【英文标题】:how to setup ssh keys for jenkins to publish via ssh 【发布时间】:2016-09-16 19:50:20 【问题描述】:Jenkins 需要证书才能使用 ssh 发布和 ssh 命令。可以在"manage jenkins" -> "Configure System"-> "publish over ssh"
下配置。
问题是:如何创建证书?
我有两台 ubuntu 服务器,一台运行 Jenkins,一台运行应用程序。
我是设置 Jenkins 证书并将其一部分放在部署盒上,还是将其设置在部署盒上,并将其一部分放在 Jenkins 上?证书是否需要以名为 Jenkins 的用户的名义使用,或者可以用于任何用户?我们在开发框中没有 Jenkins 用户。
我知道有许多不兼容的 ssh 类型,Jenkins 需要哪些?
有没有人找到关于如何设置这一切的指南(如何生成密钥,将它们放在哪里等)?
【问题讨论】:
【参考方案1】:您需要在 Jenkins 服务器上以 Jenkins 用户的身份创建一个公钥/私钥,然后将公钥复制到您想要在目标服务器上进行部署的用户。
第一步,在构建服务器上以用户jenkins
生成公钥和私钥
build1:~ jenkins$ whoami
jenkins
build1:~ jenkins$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa):
Created directory '/var/lib/jenkins/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa.
Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub.
The key fingerprint is:
[...]
The key's randomart image is:
[...]
build1:~ jenkins$ ls -l .ssh
total 2
-rw------- 1 jenkins jenkins 1679 Feb 28 11:55 id_rsa
-rw-r--r-- 1 jenkins jenkins 411 Feb 28 11:55 id_rsa.pub
build1:~ jenkins$ cat .ssh/id_rsa.pub
ssh-rsa AAAlskdjfalskdfjaslkdjf... jenkins@myserver.com
第 2 步,将 pub 文件内容粘贴到目标服务器上。
target:~ bob$ cd .ssh
target:~ bob$ vi authorized_keys (paste in the stuff which was output above.)
确保您的 .ssh 目录的权限为 700,而您的 authorized_keys 文件的权限为 644
第三步,配置Jenkins
-
在 jenkins Web 控制面板中,导航到“管理 Jenkins”->“配置系统”->“通过 SSH 发布”
要么输入文件的路径,例如“var/lib/jenkins/.ssh/id_rsa”,或粘贴与目标服务器上相同的内容。
输入您的密码、服务器和用户详细信息,一切顺利!
【讨论】:
“通过 SSH 发布”在我的詹金斯中不存在 @BigDong 是插件,安装后会出现 @infosecDaemon 见wiki.jenkins.io/display/JENKINS/Publish+Over+SSH+Plugin 对于任何想知道如何让whoami
返回用户 jenkins 的人:以其他用户身份登录后,请执行 su -s /bin/bash jenkins
。只做su jenkins
是行不通的,因为jenkins 默认没有shell。
如果您在使用 jenkins 密码时遇到问题,请使用 sudo su jenkins ..这只会询问 sudo 密码(root 密码)【参考方案2】:
您不需要在 Jenkins 服务器上创建 SSH 密钥,也不需要将 SSH 密钥存储在 Jenkins 服务器的文件系统上。在可能频繁创建和销毁 Jenkins 服务器实例的环境中,这一点信息至关重要。
生成 SSH 密钥对
在任何机器上(Windows、Linux、MacOS ... 没关系)生成一个 SSH 密钥对。以本文为指导:
GitHub: Generating a new SSH key and adding it to the ssh-agent(您可以跳过“将 SSH 密钥添加到 ssh-agent”部分)在目标服务器上
在目标服务器上,您需要将 public 密钥的内容(id_rsa.pub
根据上述文章)放入 Jenkins 用户主目录下的 .ssh/authorized_keys
文件中将用于部署。
在詹金斯
使用“通过 SSH 发布”插件
参考:https://plugins.jenkins.io/publish-over-ssh/
访问:Jenkins
> Manage Jenkins
> Configure System
> Publish over SSH
id_rsa
根据上述文章)到“密钥”字段中
在“SSH 服务器”下,为您的目标服务器“添加”一个新的服务器配置。
使用存储的全局凭据
访问:Jenkins
> Credentials
> System
> Global credentials (unrestricted)
> Add Credentials
id_rsa
根据上述文章)]
Passphrase:[输入密钥的密码,如果密钥未加密,则留空]
【讨论】:
【参考方案3】:对于 Windows:
-
在 Jenkins 中为存储库安装必要的插件(例如:GitHub install GitHub 和 GitHub Authentication plugins)。
您可以使用 Putty 密钥生成器生成密钥,或者在 git bash 中运行以下命令:
$ ssh-keygen -t rsa -b 4096 -C your_email@example.com
私钥必须是 OpenSSH。您可以在 putty 密钥生成器中将您的私钥转换为 OpenSSH
SSH 密钥成对出现,公共和私有。公钥插入到要克隆的存储库中。私钥在 Jenkins 中保存为凭据
您需要复制 SSH URL 而不是 HTTPS 才能使用 ssh 密钥。
【讨论】:
以上是关于如何为詹金斯设置 ssh 密钥以通过 ssh 发布的主要内容,如果未能解决你的问题,请参考以下文章
如何为同一主机的多个 gitlab 帐户使用多个 ssh 密钥[重复]
如何为 Github 帐户和 Bitbucket 公司帐户添加多个 SSH 密钥