security - 将私钥粘贴到 Jenkins 门户网站是否安全?

标签 security jenkins encryption ssh ssh-keys

在 Jenkins 中,我只见过一种存储私有(private) ssh key 凭证的方法。

这个方法大家都推荐:在浏览器中打开Jenkins服务器门户网站,进入Credentials , 及以下 Add Credentials , 选择 SSH Username with private key ,将私钥粘贴到网页中,然后点击ok .

我假设这使用 HTML 表单通过 HTTPS 将 POST 请求中的私钥发送到 Jenkins 服务器,然后将私钥本地保存在服务器的磁盘上。

问题 :对问题“How to securely send private keys?”的最高投票回答指出,私有(private) ssh key 只能由 保护。根本不传输 .

我的问题 :将私钥粘贴到 Jenkins 门户网站并通过 HTTPS 传输它们真的安全吗?如果没有,将私钥放入 Jenkins 凭据的最佳方法是什么?

最佳答案

现场

对于几乎所有用例来说,为此使用 Web UI 可能已经足够安全,并且在便利性方面很难被击败。

尽管如此,在需要的地方生成私钥肯定是个好建议,并且绝对可以使用 Jenkins。一种方法:

  • SSH 进入 Jenkins 服务器,并生成 key
  • 在脚本控制台中运行一些 groovy 来创建 Jenkins 凭证
  • 泄露公钥
  • 删除服务器上生成的 key

  • 在本例中,在 Jenkins 服务器上,$HOME$JENKINS_HOME指向/var/jenkins_home , 并且 key 在 ~/temp 中生成.

    在 Jenkins 服务器上生成 key
    ssh jenkins@my.jenkins.server
    mkdir ~/temp
    cd ~/temp
    ssh-keygen -t rsa -b 4096 -C "some-meaningful-label" -f "./my-in-situ-key"
    

    这将创建 my-in-situ-keymy-in-situ-key.pub/var/jenkins_home/temp .

    创建 Jenkins 凭证

    在 Jenkins 脚本控制台中:

    import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey
    import com.cloudbees.plugins.credentials.CredentialsScope
    import com.cloudbees.plugins.credentials.domains.Domain
    
    def domain = Domain.global()
    
    def store = Jenkins.instance.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()
    
    def privateKeyString = new File('/var/jenkins_home/temp/my-in-situ-key').text
    def keySource = new BasicSSHUserPrivateKey.DirectEntryPrivateKeySource(privateKeyString)
    
    def privateKeyCredential = new BasicSSHUserPrivateKey(
        CredentialsScope.GLOBAL,
        "temp-stack-overflow-key",      // id
        "jenkins",                      // username
        keySource,                      // private key
        "",                             // passphrase
        "Temporary Demo Key"            // description
    )
    
    store.addCredentials(domain, privateKeyCredential)
    "Credential Added"
    

    在清理之前测试凭证。

    清理

    获取公钥和一定要删除私钥在你出门的路上。
    cat ~/temp/my-in-situ-key.pub
    rm -rf ~/temp
    

    Relevant Javadoc

    关于security - 将私钥粘贴到 Jenkins 门户网站是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60731262/

    相关文章:

    flash - Firefox 中的 Flowplayer 为空

    api - 如何保护私有(private)移动API的 'create new user'操作?

    java - Azure key 保管库。无法使用相同的 key 和算法解密返回的值

    c# - 对称加密 (AES) : Is saving the IV and Salt alongside the encrypted data safe and proper?

    java - RSA 如何将 key 分发给发送者和接收者?

    security - 如何不对密码进行硬编码?

    javascript - JWT 可以为客户独占吗?

    git - 在文件更改时重建 Docker 容器

    javascript - 无法在运行时在 Jenkins 中安装 NodeJS

    java - 只运行相应源代码已更改的单元测试?