みおもん倶楽部 技術雑記

世界の片隅で、諜報活動と称して本を読んだりゲームをしたり

githubにsshで接続する

注意: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

以下のような画面になるはずです。

sshkeyの登録画面

ここで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は使えるので、気にしないことにします。