SSHのセットアップ

本ガイドでは、SSHを使用したGitHub接続の設定方法、Gitの複数アカウント管理方法、および2段階認証(2FA)を考慮した認証の更新について、図やサンプルコード、実践例を交えながら詳細に解説します。

SSHキーの生成

ssh-keygen -t ed25519 -C "your@email.com"
  • -t ed25519: 最新の暗号方式ED25519を指定します。安全性が高く、推奨される方式です。
  • -C "your@email.com": SSHキーにコメントとしてメールアドレスを追加します。
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/yourname/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase): 

パスフレーズは任意で設定可能ですが、セキュリティ向上のため設定を推奨します。

SSHエージェントの起動と鍵の追加

eval (ssh-agent -c)  # Fishシェル用
ssh-add ~/.ssh/id_ed25519
  • eval (ssh-agent -c): SSHエージェントを起動します。エージェントはSSHキーの管理を行い、毎回パスフレーズを入力しなくても済むようにします。
  • ssh-add: SSHキーをエージェントに追加します。

GitHubにSSHキーを追加

  1. 公開鍵をクリップボードにコピー:

    cat ~/.ssh/id_ed25519.pub | pbcopy  # macOS
    cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard  # Linux
  2. GitHubにログインし、設定画面から「SSH and GPG keys」にアクセス

  3. 「New SSH key」をクリックして、コピーした公開鍵を追加

接続の確認

次のコマンドで、GitHubへのSSH接続が正常に動作しているか確認します。

ssh -T git@github.com

正常に接続できた場合、以下のようなメッセージが表示されます:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

Gitの複数アカウント設定

Gitを複数のアカウントで使用する場合、各リポジトリごとに異なるユーザー名やメールアドレスを設定する必要があります。以下の手順でそれを実現します。

グローバルなGit設定ファイルの編集

# 1つ目のアカウントの設定
git config --global user.name "YourFirstUserName"
git config --global user.email "yourfirstemail@example.com"
 
# 2つ目のアカウントの設定
git config --global --add user.name "YourSecondUserName"
git config --global --add user.email "yoursecondemail@example.com"
 
# 設定ファイルの確認
git config --global --list

リポジトリごとの設定

特定のリポジトリで異なるアカウントを使用する場合、ローカルな設定を行います。

git config user.name "YourLocalUserName"
git config user.email "yourlocalemail@example.com"

ヒント: 複数アカウントを使用する際は、SSH設定もそれぞれ異なるキーで行うと便利です。たとえば、~/.ssh/configに各アカウントごとの設定を行います。

# ~/.ssh/config の設定例
Host github-work
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_work
 
Host github-personal
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_personal

リモートリポジトリの指定

異なるアカウントでのプッシュを行う場合、リモートURLを指定します。

git remote set-url origin git@github-work:username/repo.git

2FAとPATの活用

2段階認証(2FA)後の問題

GitHubやGitLabで2段階認証を有効にすると、従来のユーザー名とパスワードでのHTTPS認証が使用できなくなります。これにより、次のようなエラーが発生することがあります:

git pull origin master
remote: The project you were looking for could not be found.
fatal: repository 'https://github.com/your_name/your_repo.git' not found

この問題を解決するためには、パーソナルアクセストークン (PAT) を使用してリモートURLを更新する必要があります。

PATを作成

GitHubのDeveloper settingsから新しいPATを作成し、必要なスコープを選択します(repo, admin:org, workflowなど)。

リモートURLの変更

set PAT 'your_personal_access_token'
 
git remote set-url origin https://oauth2:$PAT@github.com/your_name/your_repo.git

これにより、.git/configが次のように変更されます:

+ [remote "origin"]
+     url = https://oauth2:ACCESS_TOKEN@gitlab.com/yourself/yourproject.git

HTTPSからSSHへ移行する際の注意点

2段階認証後は、HTTPSではなくSSHを使用してリポジトリにアクセスすることを推奨します。以下は、HTTPS URLからSSH URLに変更する手順です。

現在のリモートURLを確認

git remote -v

SSH URLに変更

git remote set-url origin git@github.com:your_name/your_repo.git

図表と参考リンク

  1. SSH接続と認証の流れ
    SSH Setup Flow

  2. 参考リンク