【问题标题】:how to setup ssh keys for jenkins to publish via ssh如何为詹金斯设置 ssh 密钥以通过 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 需要哪些?

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

【问题讨论】:

    标签: jenkins ssh


    【解决方案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

    1. 在 jenkins Web 控制面板中,导航到“管理 Jenkins”->“配置系统”->“通过 SSH 发布”
    2. 要么输入文件的路径,例如“var/lib/jenkins/.ssh/id_rsa”,或粘贴与目标服务器上相同的内容。
    3. 输入您的密码、服务器和用户详细信息,一切顺利!

    【讨论】:

    • “通过 SSH 发布”在我的詹金斯中不存在
    • @BigDong 是插件,安装后会出现
    • 对于任何想知道如何让 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 密钥对。以本文为指导:

    在目标服务器上

    在目标服务器上,您需要将 public 密钥的内容(id_rsa.pub 根据上述文章)放入 Jenkins 用户主目录下的 .ssh/authorized_keys 文件中将用于部署。

    在詹金斯

    使用“通过 SSH 发布”插件

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

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

    • 如果私钥已加密,则您需要在“密码”字段中输入密钥的密码,否则不要理会。​​li>
    • 将“密钥路径”字段留空,因为当您使用粘贴的密钥时,该字段将被忽略(下一步)
    • 复制并粘贴 private 密钥的内容(id_rsa 根据上述文章)到“密钥”字段中
    • 在“SSH 服务器”下,为您的目标服务器“添加”一个新的服务器配置。

    使用存储的全局凭据

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

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

    【讨论】:

      【解决方案3】:

      对于 Windows:

      1. 在 Jenkins 中为存储库安装必要的插件(例如:GitHub install GitHub 和 GitHub Authentication plugins)。
      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 密钥。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-19
        • 1970-01-01
        • 2018-10-26
        • 2020-09-03
        • 2012-05-13
        • 1970-01-01
        • 2012-12-23
        • 2015-10-14
        相关资源
        最近更新 更多