次のようなスクリプトでgitリポジトリのクローンを作成しています。
git clone https://user:[email protected]/name/.git
これは機能しますが、私のユーザー名とパスワードです!現在、Origin 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:[email protected]/name/repo.git master
ユーザー名またはパスワードは.git/config
に保存されません。ただし、他の手順を実行しない限り、現在のプロセスを表示するコマンド(ps
など)からプロセスが実行されている間、プレーンテキストのユーザー名とパスワードは表示されます。
コメントで述べたように、このメソッドはHTTPSを使用しているので 特殊文字はURLエンコードする必要があります パスワードにも表示される可能性があります。
(sshを使用できない場合)私が行うもう1つの提案は、プレーンテキストのユーザー名/パスワードの代わりに実際にOAuthトークンを使用することです。プロファイル設定からOAuthトークンを生成できます: https://github.com/settings/tokens 。
次に、そのトークンを使用すると、pullコマンドは
git pull https://$OAUTH_TOKEN:[email protected]/name/repo.git master
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
を実行します。
これには、パスワードがプロセスリストにも表示されないという利点があります。
~/.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投稿、ブログなど)を試した後、everyメソッドを試しましたが、これは何ですか思いついたすべてのものをカバーしています。
これらは、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://[email protected]/project.git
スクリプトは次の形式でstdinを受け取ります。
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=
詳細は チートシート をご覧ください。