コンテンツにスキップ

UbuntuでGitHubにSSH接続

公式: https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent?platform=linux

GitHub に SSH 接続すると

SSH (Secure Shell プロトコル) を使用して、GitHub.com 上のリポジトリ内のデータにアクセスし、書き込みを行うことができます。

なお、GitHub は過去 1 年間使用されていない SSH キーを自動的に削除し、アカウントを安全に保ちます。

SSH クライアントのインストール

ssh-keygenコマンドを使用するためにopenssh-clientパッケージをインストールします。

Terminal window
sudo apt update
sudo apt install openssh-client

SSH キーの生成

以下のコマンドを実行して SSH キーを生成します。 メールアドレスの部分は適当に入力しても良さそうですが、公式では GitHub で使用しているメールアドレスを入力するよう促しているため、それに従います。https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent?platform=linux#generating-a-new-ssh-key

SSHキーの生成
ssh-keygen -t ed25519 -C "メールアドレス"

キーを保存するファイル名を尋ねられます。 何も入力せずに Enter キーを押すとデフォルトの$HOME/.ssh/id_ed25519に保存されます。

SSHキーの生成
Generating public/private ed25519 key pair.
Enter file in which to save the key ($HOME/.ssh/id_ed25519):

パスフレーズ設定

パスフレーズを設定します。何も入力しない場合はパスフレーズを無効にできます。

SSHキーの生成
Created directory '$HOME/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
実行結果
Your identification has been saved in $HOME/.ssh/id_ed25519
Your public key has been saved in $HOME/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:B/a4qHQWJJsvHGnJXqm6E73Q8mNmd0XL8gXXXk8VUXc メールアドレス
The key's randomart image is:
+--[ED25519 256]--+
| .E|
| .o|
| . . o .|
| . B o +. .|
| oO + Sooo . |
| ++o= ooo= + . |
| =*.= .B o o |
| .oB=. . o . |
| o*.o . |
+----[SHA256]-----+

公開鍵の確認

公開鍵の確認
cat ~/.ssh/id_ed25519.pub

以下のような公開鍵が出力されます。

実行結果
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/k/gntlQ0hctJjZ5UrxY+hPaayXXXXXXH+hJvr3sme メールアドレス

公開鍵の登録

https://github.com/settings/ssh/newにアクセスして公開鍵を登録します。

Titleは任意で、Keyに公開鍵(ここではssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAII/k/gntlQ0hctJjZ5UrxY+hPaayXXXXXXH+hJvr3sme メールアドレス)を貼り付けてAdd SSH keyをクリックします。

接続テスト

Terminal window
ssh -T git@github.com

以下のように尋ねられた場合はyesを入力します。

Terminal window
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvXXXr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

パスフレーズ設定でパスフレーズを設定した場合は、そのパスフレーズを入力します。

Terminal window
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enter passphrase for key '$HOME/.ssh/id_ed25519':
実行結果
Hi XXX_USERNAME_XXX! You've successfully authenticated, but GitHub does not provide shell access.

SSH キーを ssh-agent に追加

パスフレーズ設定でパスフレーズを設定した場合は、毎回パスフレーズを尋ねられます。

ssh-agentを使用すると、毎回パスフレーズを入力する手間を省けます。

SSH エージェントを起動します。

SSHエージェントを起動
eval "$(ssh-agent -s)"
実行結果
Agent pid 996

以下のコマンドで鍵を SSH エージェントに追加します。

鍵をSSHエージェントに追加
ssh-add ~/.ssh/id_ed25519

一度だけパスフレーズを入力すれば、SSH エージェントがその後の接続を管理します。

Terminal window
Enter passphrase for $HOME/.ssh/id_ed25519:
実行結果
Identity added: $HOME/.ssh/id_ed25519 (メールアドレス)

再度接続してみます。

Terminal window
ssh -T git@github.com
実行結果
Hi XXX_USERNAME_XXX! You've successfully authenticated, but GitHub does not provide shell access.

おまけ

設定しておくと便利な設定項目です。

ユーザー情報

Terminal window
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

デフォルトエディター

コミットメッセージを編集するエディターを設定することが可能です。(git commitを実行した際に開かれるエディター)

何も設定していない場合は、nanoまたは、環境変数$EDITOR$VISUALに設定しているエディターが使用されると思います。

vimに設定
git config --global core.editor "vim"

デフォルトブランチ

mainに設定
git config --global init.defaultBranch main

エイリアス

https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-Git-%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9

Terminal window
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.sts 'status --short'
git config --global alias.last 'log -1 HEAD'
git config --global alias.hello '!echo hello world'

以下のようにシンプルになります。

Terminal window
git co # -> git checkout
git br # -> git branch
git ci # -> git commit
git st # -> git status
git sts # -> git status --short
git last # -> git log -1 HEAD
git hello # -> echo hello world

エイリアスを確認

~/.gitconfigや、.git/configなどを直接確認してもよいと思います。

Terminal window
# checkout
git config --global --get alias.co
# すべて
git config --global --get-regexp alias

エイリアスを解除

~/.gitconfigや、.git/configなどを直接編集してもよいと思います。

Terminal window
git config --global --unset alias.co
git config --global --unset alias.br
git config --global --unset alias.ci
git config --global --unset alias.st
git config --global --unset alias.sts
git config --global --unset alias.last
git config --global --unset alias.hello