・macOS Ventura
・GitHubの登録
・Gitのインストール
Homebrew:brew install git
「Git」は、コードのバージョン管理システムのひとつです。Gitを利用することで、特定のバージョンの差分を確認したり、バージョンを戻したりすることができます。
Gitでは、「リポジトリ」と呼ばれるファイルやディレクトリの変更履歴を管理する場所で、プロジェクトを管理します。
リポジトリには、自分のパソコン(ローカル)上の「ローカルリポジトリ」とWebサーバー上の「リモートリポジトリ」があります。
今回は、ローカルと一般的なリモートリポジトリである「GitHub」の間で通信するための事前準備について説明します。
GitHubへのSSH接続
ローカルからGitHubにアクセスする際は、公開鍵認証によるSSH接続が必要となります。
公開鍵認証については、【Raspberry Pi】SSHのページでも説明していますので、基本はそちらを参照してください。本頁では、補足とGitに特化した説明をします。
GitHubにSSH接続するには、以下の作業を行います。
- ローカルで秘密鍵と公開鍵を作成する。
- GitHubに公開鍵を登録する。
ローカルで秘密鍵と公開鍵を作成
ターミナルで「ssh-keygen」コマンドを使用することで、秘密鍵と公開鍵を作成することができます。
デフォルトのアルゴリズムは「RSA」ですが、より強固な暗号化アルゴリズムである「Ed25519」を指定します(「-t」オプションで指定)。
また、「-C」オプションでコメントを追加できます。GitHubでは、GitHubに登録したメールアドレスを追加するのが一般的です。
% ssh-keygen -t ed25519 -C "<email_address>"
# 鍵の保存場所を聞かれますが、通常デフォルトの場所に保存しますので、そのままリターンキーを押してください。
Enter file in which to save the key (/Users/<user_name>/.ssh/id_ed25519):
Created directory '/Users/<user_name>/.ssh'.
# 次に「パスフレーズ」の設定を求められます。任意ですので設定しない場合はそのままリターンキーを押してください。
Enter passphrase (empty for no passphrase):
# 再度、パスフレーズの入力が求められます。設定していない場合はそのままリターンキーを押してください。
Enter same passphrase again:
これで「~/.ssh/id_ed25519.pub」ファイル(公開鍵)と「~/.ssh/id_ed25519」ファイル(秘密鍵)が作成されます。
ssh-agentに秘密鍵を登録
秘密鍵を管理するプログラムである「ssh-agent」を設定します。
ssh-agentを使用することで、以下の利点がありますが、ssh-agentの使用は必須ではありません。
- sshコマンドの「-i」オプション(秘密鍵を指定)を省略可能。
- パスフレーズの入力が不要。
- サーバーを跨いだ認証において、踏み台のサーバーに秘密鍵を保管する必要がない。
以下のコマンドでssh-agentを起動します。
% eval "$(ssh-agent)"
「eval」コマンドは、引数で与えられた文字列をコマンドとして実行します。
また、「$(command)」は、実行結果を出力し展開します。ダブルクォーテーションで囲むと文字列として解釈をしますので、「% eval "$(ssh-agent)"」は、「ssh-agentを実行した結果を文字列として解釈し、コマンドとして実行する」、ということを意味します。
ちなみに、「% ssh-agent」を実行すると、
SSH_AUTH_SOCK=/var/folders/...(省略)...; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3410; export SSH_AGENT_PID;
echo Agent pid 3410;
と出力されます。ssh-agent自体の起動はされますが、これだけでは各種環境変数が設定されないため、「SSH_AUTH_SOCK」と「SSH_AGENT_PID」に関するコマンドも別途実行する必要があります。
「eval」コマンドを使用することで、これらをいっぺんに実行することができます。
参考に、引用符について、以下にまとめます。
- ' '(シングルクォーテーション):囲まれた部分は文字列として解釈される。
- " "(ダブルクォーテーション):囲まれた部分は文字列として解釈される。ただし、変数が含まれている場合、その変数は展開される。
- ` `(バッククォーテーション):囲まれた部分をコマンドとして実行(変数があり変数の中身がコマンドの場合も同様)し、実行結果が展開される。「$(command)」と同じ。
次に、ssh-agentに秘密鍵を登録します。「ssh-add」コマンドに続けて秘密鍵を指定すると、パスフレーズを聞かれます。これにより、ssh-agentに秘密鍵とパスフレーズが登録されます。
しかし、シェルを再起動する度に秘密鍵の情報はリセットされてしまい、都度「ssh-add」コマンドを実行する必要があります。macOSの場合、「keychain」(パスワードやアカウント情報を保管する機能)に秘密鍵を登録する「--apple-use-keychain」オプションを使うことができます。これにより、シェルを再起動しても秘密鍵の情報はリセットされなくなります。
% ssh-add --apple-use-keychain ~/.ssh/id_ed25519
Enter passphrase for /Users/<user_name>/.ssh/id_ed25519:
Identity added: /Users/<user_name>/.ssh/id_ed25519 (<email_address>)
# 登録した秘密鍵は「-l」オプションで確認できます。
% ssh-add -l
256 SHA256:<hash_value> (ED25519)
上記のコマンドにより、keychainに秘密鍵の情報が保存され、シェルの再起動時にもssh-agentがそれを自動的に読み込んでくれますが、PCをシャットダウンしてしまうと自動で読み込むことができません(keychainの情報は消えていません)。
「.ssh/config」ファイルに以下の情報を書き込むことで、シャットダウン後でもssh-agentがkeychainから情報を自動的に読み込むことができるようになります。
Host github.com # 設定をGitHubに限定しています。限定しない場合は「*」としてください。
AddKeysToAgent yes # SSH接続時に使った秘密鍵の情報をssh-agentに追加します。追加された場合、次回以降のSSH時のパスフレーズが省略できます。(「ssh-add」コマンドに相当。)
UseKeychain yes # 秘密鍵の情報をkeychainに保存します。(「--apple-use-keychain」オプションに相当。)
IdentityFile ~/.ssh/id_ed25519 # 使用する秘密鍵を指定します。SSH時に鍵の指定が不要となります。
GitHubに公開鍵を登録
「pbcopy」コマンドを使用して、公開鍵の中身をクリップボードにコピーします。
% pbcopy < ~/.ssh/id_ed25519.pub
GitHubマイページの右上にあるアイコンをクリックし、表示された「Settings」を選択し、左のメニューにある「SSH and GPG keys」を選択してください。
緑色の「New SSH key」ボタンをクリックし、以下の内容を登録して、緑色の「Add SSH key」ボタンを選択することで、公開鍵の登録ができます。
- Title: 公開鍵を使用するコンピュータの名前等を登録すると良いです。
- Key type:「Authentication Key(公開鍵)」か「Signing Key(署名付きの鍵)」を選択(通常は「Authentication Key」)。
- Key:クリップボードにコピーした公開鍵の内容を貼り付け。
GitHubとのSSH接続テスト
以下のコマンドを使用してGitHubとのSSH接続テストを行います。
% ssh -T git@github.com
# 実行結果
The authenticity of host 'github.com (<IP_Address>)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?
表示されたフィンガープリントが、GitHubの公開鍵フィンガープリント(こちらのページで確認できます)と一致することを確認し、同じであれば「yes」と入力します。
以下のようなコメントが表示されれば接続設定は完了です。
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Hi <user_name>! You've successfully authenticated, but GitHub does not provide shell access.
ローカル側の設定
Gitの設定は「~/.gitconfig」ファイルに保存され、その設定は基本的にglobalで適用(全てのリポジトリに適用)されます。
「~/.gitconfig」ファイルの設定は、「git config」コマンドと「--global」オプションに続き、「attribute」と「value」を指定することで行います。「--global」オプションがあることで、当該ユーザーのシステム全体(全てのリポジトリ)の設定となります。
なお、「--global」オプションを付けなかった場合、実行したリポジトリのみの設定となり、その内容は「~/.gitconfig」ファイルではなく、「.git/config」ファイル(ローカルリポジトリ内に作成されるリポジトリ独自の設定ファイル)に保存されます。
まず、GitHubのアカウント情報をGitに登録します。
% git config --global user.name "<user_name>"
% git config --global user.email "<email_address>"
次のコマンドで、設定した内容の一覧を確認できます。
% git config --global --list
ターミナル上でコマンドの結果が画面一杯に表示され(「pager」といいます。)、その画面から抜けるためにQキーやcommandキー+Cキー等を入力する必要があり面倒なこともあります。
以下のコマンドでpagerを無効にすることができますので、適宜利用してください。
% git config --global --replace-all core.pager "less -F -X"