看Git 凭证和私有包备忘单

看Git 凭证和私有包备忘单

我正在用这样的脚本克隆 git 存储库:

git clone https://user:[email protected]/name/.git

这有效,但是我的用户名和密码!现在存储在原始 URL 中.git/config

我该如何防止这种情况,但仍在脚本中执行此操作(因此无需手动输入密码)?

答案1

我使用的方法是实际使用git pull而不是克隆。脚本如下所示:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:[email protected]/name/repo.git master

这不会将您的用户名或密码存储在 中.git/config。但是,除非采取其他步骤,否则在进程运行时,从显示当前进程的命令(例如ps)可以看到纯文本用户名和密码。

正如评论中提到的,由于此方法使用 HTTPS您必须对任何特殊字符进行 URL 编码这也可能出现在您的密码中。

我还有一个建议(如果您不能使用 ssh)是实际使用 OAuth 令牌而不是纯文本用户名/密码,因为它更安全一些。您可以从个人资料设置中生成 OAuth 令牌:https://github.com/settings/tokens

然后使用该令牌执行拉取命令

git pull https://$OAUTH_TOKEN:[email protected]/name/repo.git master

答案2

我认为最好的解决方案是使用自定义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

这样做的好处是密码不会在进程列表中显示。

答案3

经过许多我尝试过 SO 帖子、博客等每一个方法,这就是我想到的。它涵盖了一切。

Git 凭证和私有包备忘单

这些都是可以安全地验证 git 以克隆存储库的方法和工具无需交互式密码提示

  • SSH 公钥
    • SSH_ASKPASS
  • API 访问令牌
    • GIT_ASKPASS
    • .gitconfig 代替
    • .gitconfig [凭证]
    • .git-凭据
    • .netrc
  • 奖励:与私人套餐一起使用
    • 节点/npm 包.json
    • python/pip/eggs 要求.txt
    • 红宝石 Gemfile
    • golang.mod 文件

无纯文本存储的最佳选择

从这里的问题来看,SSH 密钥GIT_ASKPASSgit credential store使用 OS Keychain 管理器可能是最佳选择。

由于 GIT_ASKPASS 可能是这三个中最难理解的,我将在这里详细介绍它 - 其他的都在备忘单中。

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://[email protected]/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=

更多详细信息请参阅备忘单

答案4

将您的令牌或密码存储在安全的地方,例如经过

然后使用 bash 脚本将 git 映射host到你的密码存储,例如:

#!/usr/bin/env bash
# assuming "get" action from git and a config like this
# git config --global credential.helper $XDG_BIN_HOME'/git_credentials_from_pass $@'
while IFS= read -r line
do
  echo "$line"
  if [[ "$line" =~ host=.*github.com.* ]]; then
      echo "username=your_user_name"
      echo "password=$(pass show token_github.com/your_username)"
  #else ...
  fi
done

更改您的设置方式your_usernametoken_github.com

来源

相关内容