如何为jenkins设置ssh密钥以通过ssh发布

Joh*_*tle 24 ssh jenkins

Jenkins需要证书才能使用ssh发布和ssh命令.它可以在下配置"manage jenkins" -> "Configure System"-> "publish over ssh".

问题是:如何创建证书?

我有两个ubuntu服务器,一个运行Jenkins,另一个运行应用程序.

我是否设置了Jenkins证书并将其中的一部分放在部署框上,或者在部署框上设置了证书,并将其中的一部分放在Jenkins上?证书是否需要名为Jenkins的用户名,或者是否适用于任何用户?我们在开发框中没有Jenkins用户.

我知道有许多不兼容的ssh类型,Jenkins需要它吗?

有没有人找到如何设置这一切的指南(如何生成密钥,在哪里放置它们等)?

Joh*_*tle 40

您需要在Jenkins服务器上创建公钥/私钥作为Jenkins用户,然后将公钥复制到要在目标服务器上进行部署的用户.

步骤1,在构建服务器上以用户身份生成公钥和私钥 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
Run Code Online (Sandbox Code Playgroud)

步骤2,将pub文件内容粘贴到目标服务器上.

target:~ bob$ cd .ssh
target:~ bob$ vi authorized_keys (paste in the stuff which was output above.)
Run Code Online (Sandbox Code Playgroud)

确保您的.ssh目录中包含permissoins 700,并且您的authorized_keys文件具有权限644

第3步,配置Jenkins

  1. 在jenkins Web控制面板中,请点击"管理Jenkins" - >"配置系统" - >"通过SSH发布"
  2. 输入文件的路径,例如"var/lib/jenkins/.ssh/id_rsa",或粘贴与目标服务器上相同的内容.
  3. 输入您的密码,服务器和用户详细信息,您就可以开始了!

  • 我的jenkins中不存在"通过SSH发布" (10认同)
  • 对于任何想知道如何让'whoami`返回用户jenkins的人:一旦以另一个用户身份登录,请执行`su -s/bin/bash jenkins`.只是做'su jenkins`是行不通的,因为jenkins默认没有shell. (9认同)
  • @BigDong它是一个插件,它会在你安装后出现 (3认同)
  • 如果您对 jenkins 密码有疑问,请使用 sudo su jenkins ..这只会询问 sudo 密码(root 密码) (2认同)

Kar*_*bur 6

您不需要在 Jenkins 服务器上创建 SSH 密钥,也不需要将 SSH 密钥存储在 Jenkins 服务器的文件系统上。在可能频繁创建和销毁 Jenkins 服务器实例的环境中,这一点信息至关重要。

生成 SSH 密钥对

在任何机器上(Windows、Linux、MacOS……都无所谓)生成一个 SSH 密钥对。使用这篇文章作为指导:

在目标服务器上

在目标服务器上,你需要将内容放在公共密钥(id_rsa.pub每上述文章)到.ssh/authorized_keys文件,詹金斯将使用部署在用户的主目录下。

在詹金斯

使用“通过 SSH 发布”插件

参考:https : //plugins.jenkins.io/publish-over-ssh/

访问:Jenkins> Manage Jenkins> Configure System>Publish over SSH

  • 如果私钥已加密,则您需要在“密码短语”字段中输入密钥的密码短语,否则不要管它。
  • 将“Path to key”字段留空,因为当您使用粘贴的密钥时,无论如何都会忽略此字段(下一步)
  • 私钥的内容(id_rsa根据上述文章)复制并粘贴到“密钥”字段中
  • 在“SSH 服务器”下,为目标服务器“添加”一个新的服务器配置。

使用存储的全局凭证

访问:Jenkins> Credentials> System> Global credentials (unrestricted)>Add Credentials

  • 种类:“带有私钥的 SSH 用户名”
  • 范围:“全球”
  • ID : [为这个键创建一个唯一的 ID]
  • 描述:[可选地,输入描述]
  • 用户名:[用户名詹金斯将用于连接到远程服务器]
  • 私钥:[选择“直接输入”]
  • 密钥:[粘贴私钥的内容(id_rsa根据上述文章)]
  • 密码:[输入密钥的密码,如果密钥未加密,则留空]


小智 5

对于 Windows:

  1. 在 Jenkins 中安装存储库所需的插件(例如:GitHub 安装 GitHub 和 GitHub 身份验证插件)。
  2. 您可以使用 Putty 密钥生成器生成密钥,或者通过在 git bash 中运行以下命令来生成密钥: $ ssh-keygen -t rsa -b 4096 -C your_email@example.com
  3. 私钥必须是 OpenSSH。您可以在 putty 密钥生成器中将您的私钥转换为 OpenSSH
  4. SSH 密钥成对出现,包括公共密钥和私有密钥。公钥被插入到要克隆的存储库中。私钥在 Jenkins 中保存为凭证
  5. 您需要复制 SSH URL 而不是 HTTPS 才能使用 ssh 密钥。