脚本通过ssh执行git pull并绕过密码短语要求?

时间:2015-07-10 00:26:55

标签: git shell continuous-integration bamboo ssh-agent

我试图与Bamboo建立持续集成。我想配置一个ssh进入我们的舞台服务器的任务,cd进入正确的目录并执行git pull。

我已经能够设置ssh任务了,但是执行git pull很困难。

我采取的步骤:

  • 将ssh任务配置为cd进入项目目录并运行以下脚本:

    #!/bin/bash
    echo "pulling from master"
    git pull origin master
    
  • 脚本运行,但日志在尝试拉出后显示Permission denied (publickey).错误。

  • 我将我的remote-url从HTTPS切换到ssh并创建了一个公钥。现在,当我尝试手动拉动时,它会询问密钥的密码。

  • 使用ssh-agent缓存会话的密码。

  • 意识到此缓存仅在我关闭会话之前一直存在,因此我按照本文中的步骤(https://confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git)在每个新会话中启动ssh-agent。即我将此脚本添加到.bashrc

    SSH_ENV=$HOME/.ssh/environment
    
    # start the ssh-agent
    function start_agent {
        echo "Initializing new SSH agent..."
        # spawn ssh-agent
        /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
        echo succeeded
        chmod 600 "${SSH_ENV}"
        . "${SSH_ENV}" > /dev/null
        /usr/bin/ssh-add
    }
    
    if [ -f "${SSH_ENV}" ]; then
         . "${SSH_ENV}" > /dev/null
         ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
            start_agent;
        }
    else
        start_agent;
    fi
    

并将其添加到.ssh / config文件中:

Host myStashInstance.org
 IdentityFile ~/.ssh/id_rsa
  • 文章说我应该被提示输入密码短语,代理人会启动但是没有发生。我仍然需要手动启动ssh-agent。

我想知道在开始新会话时让ssh-agent启动的后续步骤是什么,这样我就可以继续搞清楚如何完成配置这项工作。 (如果我完全走错了路,也可以采取其他途径的建议。)

1 个答案:

答案 0 :(得分:1)

总结一下,您遇到了以下问题:

  • Bamboo Agent在服务器A上运行
  • 服务器B是您的临时服务器
  • 作为在服务器A上运行的构建的一部分,您希望SSH到B并在那里执行git pull
  • 对Git仓库的身份验证要求您输入密码或密码(即使使用ssh-agent)。

有几种方法可以解决这个问题:

选项1:在临时服务器上运行Bamboo Agent

要简化此环境,请在Staging Server上安装Bamboo Agent。在Bamboo构建计划中输入Git URL和凭据,让Bamboo负责工作。

Bamboo将拉出Git仓库,然后您可以运行您想要的任何步骤并部署到您的登台服务器进程。

选项2:部署到临时服务器

不要在登台服务器上执行Git操作,而是在服务器A上执行。在Bamboo构建计划中输入Git URL和凭据,让Bamboo负责工作。

在服务器A上签出项目后,运行您想要在那里执行的任何构建步骤,然后打包(zip / tar / jar / ...)构建结果并将它们复制到Staging Server。也许你根本不需要在Staging Server上使用Git。

选项3:使用.netrc文件进行Git身份验证

这是最不安全的选项。将远程URL切换回HTTPS,然后在登台服务器上创建~/.netrc文件,并在其中为您的Git服务器添加条目,提供用户名和密码,如下所述:https://confluence.atlassian.com/display/STASH/Permanently+authenticating+with+Git+repositories#PermanentlyauthenticatingwithGitrepositories-Usingthe.netrcfile

示例:

machine mygitserver
login mario
password SECRET

注意,这要求您以明文形式在.netrc文件中存储密码。如果您能承受这种风险,请仅使用此方法。如果此帐户使用的密码更改,您还必须在此文件中更改密码。您可能希望使用技术/服务帐户,而不是真实的用户帐户。尽可能锁定此帐户。

这三个选项中的一个应该可以帮助您解决问题。