将 SSH 密钥传递到 Jenkins 入站代理容器

问题描述 投票:0回答:1

我们的 Jenkins 控制器设置仅在代理容器中运行作业。我们正在使用 jenkins/inbound-agent 映像来创建将在其中运行作业的容器。

对于我们遗留的非容器化 tomcat 应用程序:我们需要运行 Maven 构建,将构建工件复制到目标服务器,然后重新启动该服务器上的 tomcat 服务。这要求代理容器能够 ssh 到目标服务器来运行命令,因此我需要能够向代理容器提供有效的 ssh 密钥和 ssh 配置。 (maven 构建步骤在容器中成功运行,但无法从容器执行部署步骤)。

我尝试配置入站代理映像以安装有效的 ssh 密钥和 ssh 配置 创建容器时,在 jenkins 用户的 .ssh 目录中,但是默认安装会为 root 用户提供已安装文件的所有权,因此由于这些文件的权限错误而无法 ssh (入站代理映像未安装 sudo因此不能作为预构建步骤覆盖容器中这些文件的所有权)。

我们公司的安全策略要求我们不能将私钥烘焙到映像中,因此我无法基于包含 ssh 密钥的基本 jenkins/inbound-agent 映像构建自定义映像。

向代理容器提供 ssh 密钥和配置以便它可以在部署过程中通过 ssh 与数据中心中的服务器进行交互的正确方法是什么?我相信我可以创建一个 Jenkins SSH 密钥凭证并将其写入 /home/jenkins/.ssh,尽管这可能必须被定义为每个作业的初始步骤,希望有更好的方法来默认执行此操作容器启动期间的步骤。

docker jenkins ssh containers ssh-keys
1个回答
0
投票

您尝试过ssh-agent-plugin吗?

将 ssh 密钥存储在 jenkins 凭据中并像这样使用它:

steps {
    sshagent(credentials: ['ssh-credentials-id']) {
      sh '''
          [ -d ~/.ssh ] || mkdir ~/.ssh && chmod 0700 ~/.ssh
          ssh-keyscan -t rsa,dsa example.com >> ~/.ssh/known_hosts
          ssh [email protected] ...
      '''
    }
}

或使用凭证

withCredentials([sshUserPrivateKey(credentialsId: "key-id", keyFileVariable: 'sshkeyfile')]) {
  sh 'ssh -i ${sshkeyfile} YOUR COMMAND'
}
© www.soinside.com 2019 - 2024. All rights reserved.