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

yrdbyhpb  于 2023-08-03  发布在  Jenkins
关注(0)|答案(1)|浏览(126)

我们的Jenkins控制器设置仅在代理容器中运行作业。我们使用jenkins/inbound-agent镜像来创建运行作业的容器。
对于我们的传统非容器化tomcat应用程序:我们需要运行一个Maven构建,将构建工件复制到目标服务器,并在该服务器上重新启动tomcat服务。这需要代理容器能够通过ssh连接到目标服务器以运行命令,因此我需要能够为代理容器提供有效的ssh密钥和ssh配置。(maven构建步骤在容器中成功运行,但无法从容器执行部署步骤)。
我尝试配置inbound-agent镜像,在创建容器时在jenkins用户的.ssh目录中挂载一个有效的ssh密钥和ssh配置,但是默认情况下挂载会将挂载文件的所有权赋予root用户,因此无法ssh,因为这些文件的权限不正确(inbound-agent镜像没有安装sudo,因此无法在构建前覆盖容器中这些文件的所有权)。
我们公司的安全策略要求我们不能将私钥烘焙到映像中,所以我不能在包含ssh密钥的基础jenkins/inbound-agent映像之外构建自定义映像。
向代理容器提供ssh密钥和配置的正确方法是什么,以便它可以通过ssh与数据中心中的服务器交互,作为我们部署的一部分?我相信我可以创建一个Jenkins SSH密钥凭证并将其写入/home/jenkins/.ssh,尽管这可能必须定义为每个作业的初始步骤,希望有更好的方法在容器启动期间将其作为默认步骤。

eyh26e7m

eyh26e7m1#

你有没有试过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 user@example.com ...
      '''
    }
}

字符串
或withCredentials

withCredentials([sshUserPrivateKey(credentialsId: "key-id", keyFileVariable: 'sshkeyfile')]) {
  sh 'ssh -i ${sshkeyfile} YOUR COMMAND'
}

相关问题