注意:Linux or macユーザを想定しています。windowsユーザも、細部は異なると思いますが、適用可能なはずです。
キーペアの作成
キーペアのディレクトリへ移動します
cd ~/.ssh
キーペアを生成します。ED25519にしますが、RSAとかでもいいと思います。
ssh-keygen -t ed25519
以下のような画面になるはずです。
username@hostname .ssh % ssh-keygen -t ed25519 Generating public/private ed25519 key pair. Enter file in which to save the key (/Users/username/.ssh/id_ed25519): github⭐️1 Enter passphrase (empty for no passphrase):⭐️2 Enter same passphrase again:⭐️2 Your identification has been saved in github Your public key has been saved in github.pub The key fingerprint is: SHA256:xa/hogehogehogehogehogehogehoge/w username@hostname.local
⭐️1 キー名を入力します。github、gitlab、codecommitなど使い分けるならそれがわかるように、もしくはデフォルトのままにして使い回してもOKです。ここではgithubと入力することにします。
⭐️2 パスフレーズを入力しますが私は普段空欄です。現場のルールに従ってください。
キーの登録
以下のURLを開いてください。
https://github.com/settings/keys
以下のような画面になるはずです。
ここでNew SSH Keyをクリックします。以下のような画面になるはずです。
Titleは識別しやすい名前ならなんでもいいですが、私はmacにつけたホスト名をつけてます。他の端末からもアクセスすることがあるのですが、それが識別できればOKかと思います。
Keyにはキーペアのうち公開鍵の情報を登録します。秘密鍵は登録しないように。
なお、公開鍵は以下のコマンドで取得できます。
cat ~/.ssh/github.pub
github側の作業はこれでOKですが、もうちょっと続きます。
~/.ssh/configの設定
~/.ssh/configファイルを設定します。
編集コマンドはviでもcatでもなんでもいいですが、macではopenコマンドを使えば、多少不慣れな人でも操作可能かと思います。
open ~/.ssh/config
以下の内容を追加します。キー名は適宜置き換えてください。
Host github github.com Hostname github.com IdentityFile ~/.ssh/github User git
接続確認のために、以下を実行します。
ssh -T git@github.com
以下のように表示されれば成功です。
username@hostname .ssh % ssh -T git@github.com Hi Username! You've successfully authenticated, but GitHub does not provide shell access.
追記:sshとは
そもそもsshとはSecure SHellの略で、ネットワーク経由で他のPCにアクセス・操作するための、クライアントとサーバ構成のプロトコルです。ごく簡単に言えば、sshクライアントがLinuxコマンドをネットワーク経由で送り付け、sshサーバがそれを解釈して実行し、その結果をネットワーク経由で送り返す、という挙動になります。(さらにいうと、Linuxコマンドを送るだけがsshではない)
種々のコマンドの実行を許可するので認証が当然必要になるのですが、大雑把にIDパスワードを使う方法とキーペアを使う方法があり、特に後者は公開鍵認証と呼ばれます。キーペアのうち公開して良い方(公開鍵)をsshサーバにあらかじめ登録しておき、認証時にはsshクライアントのみが持っているはずの秘密鍵を使って認証をするというものですが、詳しい挙動は適宜ググってください。
さて本題ですが、githubではローカル環境と接続する際に、httpとsshの2種類の方法で認証をすることが可能です。httpではIDとパスワード、sshではキーペアを用いた認証をするようです。ただ、githubへのアクセスにあたりsshを使ってLinuxコマンドを送りつけるのかというと、少なくともユーザがsshで接続し、Linuxコマンドを送りつけるということはありません。内部で何らかの形で使っていると思われますが、詳細を知らなくてもgithubは使えるので、気にしないことにします。