スクリプトでgit cloneにユーザー名/パスワードを付与するが、資格情報を.git / configに保存しない方法


31

次のようなスクリプトでgitリポジトリを複製しています:

git clone https://user:password@host.com/name/.git

これは機能しますが、私のユーザー名とパスワードです!の元のURLに保存されるようになりました.git/config

どうすればこれを防ぐことができますが、それでもスクリプトでこれを行うことができます(手動パスワード入力はありません)?


おそらくその後、オリジンを更新できますgit remote set-url origin https://host.com/name/.git
。– ceejayoz

@ceejayozはい、可能です。アイデアをありがとう。私はまだ、資格情報を一時的に保存することさえない解決策を望んでいます。
ネイサン

4
確かに-キーでSSHベースの認証を使用します。
ceejayoz

2
SSHの代わりにhttpsを使用する理由はありますか?SSHはキーをサポートしています。
mzhaase

私は質問を理解していますが、なぜあなたはスクリプト内に保存されているパスワードで大丈夫ですか?それも同様に悪いことです。
マーティンコートー

回答:


20

私が使用する方法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

間違いなく、認証トークンを使用できません。githubではなくプライベートサーバーを使用しています。
ネイサン

3
またps、プルの実行中にユーザー名とパスワードが表示されることに注意する必要があります(少なくとも、ユーザーが互いのプロセスを表示できないようにしている場合を除く)
derobert

宣誓使用のポイント。それはまさにproduction / staging / devで必要だったものです。
RobotHumans

バディに感謝します。無駄な時間n時間n最終的にあなたの答えが返ってきました。:thumbsup
JasdeepSingh

17

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

これには、パスワードがプロセスリストにも表示されないという利点があります。


クリエイティブソリューションの場合は+1。これは、git pullソリューションよりも少し安全で、選択した自動展開ツールに秘密としてプレーンテキストパスワードを保存できます。
FGreg

13

~/.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キーを使用する傾向があります(もちろん許可されている場合)。


まあ、これは私のパスワードを〜/ .netrcの中に残します。私もそれを望まない。
ネイサン

2

乗り越えた後、数十 SOの記事、ブログなどの、私が試してみたすべての方法を、これは私が思い付いたものです。それはすべてをカバーしています。

参照Gitの資格情報&プライベートパッケージチートシートを

これらはすべて、インタラクティブなパスワードプロンプトなしでリポジトリを複製するためにgitを安全に認証できる方法とツールです

  • SSH公開キー
    • SSH_ASKPASS
  • APIアクセストークン
    • GIT_ASKPASS
    • 代わりに.gitconfig
    • .gitconfig [資格情報]
    • .git-credentials
    • .netrc
  • ボーナス:プライベートパッケージで動作
    • node / npm package.json
    • python / pip / eggs requirements.txt
    • ruby gems Gemfile
    • golang go.mod

平文ストレージなしの最適なオプション

ここで尋ねられているものから、SSHキー、、GIT_ASKPASSまたはgit credential storeOSキーチェーンマネージャーを使用するのが最良の選択かもしれません。

GIT_ASKPASSはおそらく3の中で最も理解されていないので、ここで詳細を説明します-その他はチートシートにあります。

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=

詳細については、チートシートを参照してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.