【问题标题】:How to pass passphrase to private key when releasing with standard maven plugin使用标准 maven 插件发布时如何将密码传递给私钥
【发布时间】:2017-10-21 01:21:58
【问题描述】:

我正在尝试使用标准 maven 发布插件和 Bitbucket 管道发布我的 maven 项目。我创建了自己的 docker 镜像,私钥受密码保护。我的 Bitbucket 帐户允许来自此 docker 映像的提交,并且 Bitbucket 管道能够在构建时通过环境变量注入私钥密码。

问题是 maven 发布插件会忽略所有内容并要求输入密码,这是不可接受的手动步骤。

我在 /root/.m2 中的 settings.xml 看起来像

<server>
    <id>bitbucket.org</id>
    <privateKey>/root/.ssh/id_rsa</privateKey>
    <passphrase>${env.BB_PIPELINES_MAVEN_3_3_9_JDK_8_SSH_PASSPHRASE</passphrase>
</server>

我正在使用最新版本和 scm 插件,分别是 2.5.3 和 1.9.5

在我的 pom.xml 中有服务器属性

<project.scm.id>bitbucket.org</project.scm.id>

我的 scm url 就像

<scm>
    <url>https://bitbucket.org/user/repo</url>
    <developerConnection>scm:git:git@bitbucket.org:user/repo</developerConnection
    <connection>scm:git:git@bitbucket.org:user/repo</connection>
</scm>

我尝试使用 ssh-agent,它似乎可以工作,但看起来 ssh-agent 也不允许在命令行中传递密码。

任何想法如何解决?

【问题讨论】:

    标签: git ssh maven-release-plugin bitbucket-pipelines


    【解决方案1】:

    我设法使用 expect 和 ssh-agent 解决了一些问题。

    在我的 .bashrc 中我放了

    eval `ssh-agent -s`
    /root/load-private-key.sh $BITBUCKET_PIPELINES_MAVEN_3_3_9_JDK_8_SSH_PASSPHRASE
    

    我的 load-private-key.sh 文件看起来像

    #!/usr/bin/expect -f
    set password [lindex $argv 0];
    set timeout 10
    spawn ssh-add /root/.ssh/id_rsa
    expect "Enter passphrase for /root/.ssh/id_rsa: "
    sleep 1
    send $password\n
    expect "Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)"
    

    现在每个构建会话都以加载到内存中的私钥开始,该私钥可供标准 maven 发布插件使用。

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 1970-01-01
      • 2021-11-15
      • 2013-09-29
      相关资源
      最近更新 更多