【问题标题】:Script to perform a git pull via ssh and bypass passphrase requirements?通过 ssh 执行 git pull 并绕过密码短语要求的脚本?
【发布时间】:2015-09-28 14:22:37
【问题描述】:

我正在尝试设置与 Bamboo 的持续集成。我想配置一个任务,让 ssh 进入我们的阶段服务器,cd 进入正确的目录并执行 git pull。

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

我已采取的步骤:

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

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

  • 我将远程 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 的后续步骤是什么,以便我可以继续弄清楚如何完成此作业的配置。 (如果我完全走错了路,也愿意接受其他途径的建议。)

【问题讨论】:

  • 您需要将启动代理的代码放入您的~/.bash_profile 中,以便它在登录shell 中启动。
  • 这仍然行不通,但它绝对应该。我可能在原始脚本中遇到了来自 chrome 的复制/粘贴问题。

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


【解决方案1】:

总而言之,您遇到了以下问题:

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

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

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

要简化此环境,请在您的登台服务器上安装 Bamboo 代理。在 Bamboo 构建计划中输入 Git URL 和凭据,让 Bamboo 处理工作。

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

选项 2:部署到登台服务器

不要在暂存服务器上执行 Git 操作,而是在服务器 A 上执行。在 Bamboo 构建计划中输入 Git URL 和凭据,让 Bamboo 处理工作。

在服务器 A 上签出您的项目后,运行您想要在那里执行的任何构建步骤,然后打包 (zip/tar/jar/...) 构建结果并将它们复制到暂存服务器。也许您根本不需要在 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 文件中。仅当您可以承受这种风险时才使用此方法。如果用于此帐户的密码更改,您也必须在此文件中更改它。您可能希望为此使用技术/服务帐户,而不是真正的用户帐户。尽可能锁定此帐户。

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

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 2015-07-08
    • 2016-06-30
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多