在 bash 脚本中为 git 提供密码

Posted

技术标签:

【中文标题】在 bash 脚本中为 git 提供密码【英文标题】:Provide passphrase to git in bash script 【发布时间】:2016-03-13 08:07:59 【问题描述】:

如何在 bash 脚本中使用 git fetch/pull 提供密码。 我真的需要在 bash 脚本中执行此操作,而不使用 ssh-add 或类似的东西。 有可能吗?

【问题讨论】:

嗯,我相信 git 支持 HTTP Basic Auth。因此,如果您对此感到满意(不推荐),只需使用https://username:password@hostname/path/to/foo.git 形式的 URL 通过 HTTPS 进行身份验证。 您也可以使用空密码来避免密码提示 - 再次不推荐不安全。 我认为存储密钥密码的最佳方式是使用内存。为什么不想使用 ssh 代理? 不确定我是否正确理解了您的问题。是不是通过 ssh 访问你的仓库,但你不想每次都输入密码?在这种情况下,您可以将环境变量 SSH_ASKPASS 设置为将密码写入标准输出的 shell 脚本——前提是您不介意随之而来的安全风险。 如果你不介意这样暴露你的密码,有更好的alternatives to SSH_ASKPASS。 【参考方案1】:

我使用 SSH_ASKPASS 尝试了 ssh-agent 和解决方案,但没有任何效果,然后我找到了使用 http://expect.sourceforge.net/ 的解决方案

示例(在shell中执行):

pass="passwod"
/usr/bin/expect <<EOD
spawn git fetch origin $BRANCH
expect "Enter passphrase for key '/home/$USERNAME/.ssh/id_rsa': "
send "$pass\r"
expect eof
EOD

【讨论】:

这对我来说很有效。我的用例是在不太灵活的企业 CI 设置中执行 git pull,因此我需要在 CI 接口/脚本中提供密钥密码。

以上是关于在 bash 脚本中为 git 提供密码的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中为 ssh 命令提供密码,无需使用公钥和 Expect

bash 脚本从 bash 脚本添加 git 凭据

如何从脚本中为 sudo 提供密码?

在SSH中使用bash脚本时,为Git输入私钥密码

在 Bash 脚本中使用 Expect 为 SSH 命令提供密码

在 git 存储库中处理密码的最佳实践是啥?