HTTP(S)認証のために常にユーザー資格情報を要求するGitを修正する方法


リモートGitリポジトリにアクセスまたは操作するには、SSHまたはHTTP(S)プロトコルを使用できます。前者の場合、プライベートリポジトリに関しては、パスフレーズなしでSSHキーを設定するだけで、ユーザー名とパスワードを入力せずにデータを安全に転送できます。

ただし、HTTP(S)を使用すると、すべての接続でユーザー名とパスワードの入力を求められます(Gitが特定のURLコンテキストの認証を必要とする場合)–Githubユーザーはこれをよく知っています。

この記事では、HTTP(S)経由でアクセスするために常にユーザー資格情報を要求するGitを修正する方法を紹介します。 HTTP(S)を介してリモートリポジトリとやり取りするときに、Gitがユーザー名とパスワードの入力を繰り返し要求しないようにするさまざまな方法について説明します。

LinuxにGitをインストールする方法

システムにGitパッケージがインストールされていない場合は、Linuxディストリビューションに適切なコマンドを実行してインストールします(必要に応じてSudoコマンドを使用します)。

$ sudo apt install git      [On Debian/Ubuntu]
# yum install git           [On CentOS/RHEL/Fedora]
$ sudo zypper install git   [On OpenSuse]
$ sudo pacman -S git        [On Arch Linux]

リモートURLにGitユーザー名とパスワードを入力する

前に述べたように、HTTP(S)を介してリモートGitリポジトリのクローンを作成する場合、すべての接続には、示されているようにユーザー名とパスワードが必要です。

Gitがユーザー名とパスワードを要求しないようにするには、次のようにURLにログイン資格情報を入力します。

$ sudo git clone https://username:[email protected]/username/repo_name.git
OR
$ sudo git clone https://username:[email protected]/username/repo_name.git local_folder

この方法の主な欠点は、ユーザー名とパスワードがコマンドのシェル履歴ファイルに保存されることです。

また、ローカルフォルダの下の.git/configファイルには、セキュリティ上のリスクがあります。

$ cat .git/config

注:2要素認証を有効にしているGithubユーザー、またはSAMLシングルサインオンを使用する組織にアクセスしているGithubユーザーの場合、HTTPS Gitのパスワードを入力する代わりに、パーソナルアクセストークンを生成して使用する必要があります(サンプル出力を参照)。このガイドで)。パーソナルアクセストークンを生成するには、Githubで[設定] u003d> [開発者設定] u003d> [パーソナルアクセストークン]に移動します。

リモートGitリポジトリのユーザー名とパスワードをディスクに保存する

2番目の方法は、Git資格情報ヘルパーを使用して、図のようにユーザー名とパスワードをディスク上のプレーンファイルに保存することです。

$ git config credential.helper store				
OR
$ git config --global credential.helper store		

今後、Gitは、初めてアクセスされたときに、各URLコンテキストの〜/ .git-credentialsファイルに資格情報を書き込みます。このファイルの内容を表示するには、次のようにcatコマンドを使用できます。

$ cat  ~/.git-credentials

同じURLコンテキストに対する後続のコマンドの場合、Gitは上記のファイルからユーザーの資格情報を読み取ります。

前の方法と同様に、ユーザーの資格情報をGitに渡すこの方法も、ストレージファイルが暗号化されておらず、標準のファイルシステム権限によってのみ保護されているため、安全ではありません。

以下で説明する3番目の方法は、より安全であると見なされます。

リモートGitリポジトリのユーザー名とパスワードをメモリにキャッシュする

最後になりましたが、Git資格情報ヘルパーを使用して、資格情報を一時的にメモリに保存することもできます。これを行うには、次のコマンドを発行します。

$ git config credential.helper cache
OR
$ git config --global credential.helper cache

上記のコマンドを実行した後、初めてリモートプライベートリポジトリにアクセスしようとすると、Gitはユーザー名とパスワードを要求し、しばらくの間メモリに保存します。

デフォルトのキャッシュ時間は900秒(または15分)です。その後、Gitはユーザー名とパスワードの再入力を求めるプロンプトを表示します。次のように変更できます(1800秒u003d 30分または3600秒u003d 1時間)。

$ git config --global credential.helper 'cache --timeout=18000'
OR
$ git config --global credential.helper 'cache --timeout=36000'

Gitと資格情報ヘルパーの詳細については、manページを参照してください。

$ man git
$ man git-credential-cache
$ man git-credential-store

このガイドは役に立ちましたか?以下のフィードバックフォームからお知らせください。このトピックに関する質問や考えを共有することもできます。