Skip to content

認証情報(SSH)

Gitはローカルリポジトリとリモートリポジトリを連携して使います。リモートリポジトリとは文字通りリモートサーバにあるリポジトリで、ネットワークを介してアクセスすることになります。ネットワーク越しにアクセスする以上、なんらかの方法で通信相手が本当に正しい相手であるかを確認する必要があります。

このページでは、SSHを使用する場合の認証情報の設定方法について説明します。HTTPSを使用する場合の認証情報の設定方法については認証情報(HTTPS)を参照してください。

SSHキーの生成

以下のコマンドを実行します。

Terminal window
mkdir ~/.ssh
Terminal window
ssh-keygen -t ed25519

パスワードを聞かれるので入力します。パスワードを入力しても何も表示されませんが、入力されています。パスワードを入力した後、Enterキーを押します。

SSHキーが生成されると、以下のようなメッセージが表示されます。

Terminal window
The key's randomart image is:
+--[ED25519 256]--+
|++++oB+ o. |
|*++**.oo |
|*++o.o. |
|+o. E . |
|o+ o... S . |
|. =. * o = |
| . oo + o o |
|. . . . |
|o. |
+----[SHA256]-----+

公開鍵の登録

生成したSSHキーの公開鍵をGitHubに登録します。

  1. 以下のコマンドで公開鍵を表示し、マウスで選択してコピーします
    Terminal window
    cat ~/.ssh/id_ed25519.pub
  2. GitHubにログインし、右上のアイコンをクリックし、Settingsを選択します
  3. 左のAccess内のSSH and GPG keysを選択し、New SSH keyをクリックします
  4. Titleに任意の名前を入力し、Keyに先ほどコピーした公開鍵を貼り付けます。KeytypeはAuthentication Keyのままにします

登録の確認

以下のコマンドを実行して、GitHubに登録した公開鍵が正しく登録されているか確認します。

Terminal window
ssh -T git@github.com

もしAre you sure you want to continue connecting (yes/no/[fingerprint])?というメッセージが表示されたらyesと入力します。

パスフレーズを求められたら、先ほど設定したパスワードを入力します。GitHubに登録した公開鍵が正しく登録されていると、以下のようなメッセージが表示されます。

Terminal window
Hi <ユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.

SSHエージェントの設定

SSHエージェントを設定することで、パスフレーズを毎回入力する必要がなくなります。

以下のコマンドを実行して鍵を登録します。

Terminal window
ssh-add ~/.ssh/id_ed25519

登録できたか確認するために以下のコマンドを実行します。

Terminal window
ssh-add -l

Windowsの場合、以下のコマンドをホームディレクトリ直下の.bashrcに貼り付けることで、Git Bash起動時にSSHエージェントが自動起動するように構成できます。

Terminal window
env=~/.ssh/agent.env
agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }
agent_start () {
(umask 077; ssh-agent >| "$env")
. "$env" >| /dev/null ; }
agent_load_env
# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2=agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)
if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
agent_start
ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
ssh-add
fi
unset env