次のようなスクリプトでgitリポジトリを複製しています:
git clone https://user:password@host.com/name/.git
これは機能しますが、私のユーザー名とパスワードです!の元のURLに保存されるようになりました.git/config
。
どうすればこれを防ぐことができますが、それでもスクリプトでこれを行うことができます(手動パスワード入力はありません)?
次のようなスクリプトでgitリポジトリを複製しています:
git clone https://user:password@host.com/name/.git
これは機能しますが、私のユーザー名とパスワードです!の元のURLに保存されるようになりました.git/config
。
どうすればこれを防ぐことができますが、それでもスクリプトでこれを行うことができます(手動パスワード入力はありません)?
回答:
私が使用する方法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を使用できない場合)私が行うもう1つの提案は、プレーンテキストのユーザー名/パスワードの代わりにOAuthトークンを実際に使用することです。プロファイル設定https://github.com/settings/tokensからOAuthトークンを生成できます。
次に、そのトークンを使用すると、プルコマンドは
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
そのファイルを必ず600にchmodしてください。Windowsを使用している場合は、次のリンクが役立つ場合があります。https : //stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- windows-to-save-user-and-password
個人的には、認証目的でSSHキーを使用する傾向があります(もちろん許可されている場合)。
乗り越えた後、数十 SOの記事、ブログなどの、私が試してみたすべての方法を、これは私が思い付いたものです。それはすべてをカバーしています。
これらはすべて、インタラクティブなパスワードプロンプトなしでリポジトリを複製するためにgitを安全に認証できる方法とツールです。
ここで尋ねられているものから、SSHキー、、GIT_ASKPASS
またはgit credential store
OSキーチェーンマネージャーを使用するのが最良の選択かもしれません。
GIT_ASKPASSはおそらく3の中で最も理解されていないので、ここで詳細を説明します-その他はチートシートにあります。
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