我正在像这样的脚本中克隆git存储库:
git clone https://user:password@host.com/name/.git
这可行,但是我的用户名和密码!现在存储在中的原始网址中.git/config
。
如何防止这种情况,但仍在脚本中执行(因此无需手动输入密码)?
我正在像这样的脚本中克隆git存储库:
git clone https://user:password@host.com/name/.git
这可行,但是我的用户名和密码!现在存储在中的原始网址中.git/config
。
如何防止这种情况,但仍在脚本中执行(因此无需手动输入密码)?
Answers:
我使用的方法是实际使用a git pull
而不是克隆。该脚本如下所示:
mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master
这不会在中存储您的用户名或密码.git/config
。但是,除非采取其他步骤,否则从显示当前进程(例如ps
)的命令运行进程时,将显示纯文本用户名和密码。
我会提出的另一项建议(如果您不能使用ssh)是实际上使用OAuth令牌而不是纯文本用户名/密码,因为它稍微安全些。您可以从个人资料设置中生成OAuth令牌:https : //github.com/settings/tokens。
然后使用该令牌,pull命令将是
git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master
ps
在拉动运行时,用户名和密码将是可见的(至少除非您已阻止用户看到彼此的进程)
IMO最好的解决方案是使用自定义GIT_ASKPASS
帮助程序,并将密码作为另一个环境变量传递。因此,例如,将文件创建git-askpass-helper.sh
为:
#!/bin/sh
exec echo "$GIT_PASSWORD"
然后git clone https://username@hostname/repo
使用环境变量GIT_ASKPASS=/path/to/git-askpass-helper.sh
和运行GIT_PASSWORD=nuclearlaunchcodes
。
这样做的好处是,密码也不会在进程列表中显示。
git pull
解决方案安全一些,并且允许您将纯文本密码作为秘密存储在所选的自动部署工具中。
您可以在其中输入连接凭据 ~/.netrc
文件中。类似于以下内容:
machine host.example.net
login bart
password eatmyshorts
只需确保将文件chmod更改为600即可。如果您使用的是Windows,则以下链接可能会有用:https : //stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- Windows保存用户和密码
就个人而言,我倾向于使用SSH密钥进行身份验证(当然,如果允许的话)。
经过之后 数十篇 SO帖子,博客等之后,我尝试了每种方法,这就是我想出的方法。它涵盖了一切。
这些都是可以安全地验证git来克隆存储库的方式和工具。 而无需交互式密码提示的。
根据此处的要求,SSH Keys GIT_ASKPASS
或git credential store
使用OS Keychain管理器可能是最佳选择。
由于GIT_ASKPASS可能是三者中最不了解的,因此我将在此处详细说明-其他内容都在备忘单中。
如何创建GIT_ASKPASS
脚本:
echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass
如何使用它:
export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git
该脚本以以下形式接收标准输入:
Password for 'scheme://host.tld':
该脚本接收Git ENV,例如:
GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=
在备忘单中有更多详细信息。
git remote set-url origin https://host.com/name/.git