在 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