鍵交換方式でログインしたい
安全に簡単にGitHubに接続するにはやっぱり鍵交換方式での認証が良いようです。パスワードだと確かにちょっと不安ですな。さっそくGitHubに鍵交換方式でログインできるように設定していきたいと思います。
鍵を作る
まずssh-kegen
で鍵を作ります。ssh-kegen
はLinuxやMacでは殆どの環境に最初からインストールされているはずなので、特に導入作業は必要ないと思います。
$ ssh-kegen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
ssh-kegenコマンドを実行すると最初に鍵の名前(保存場所も含めて)をどうするかを聞かれます。 何も指定しなければコマンド実行ユーザのホームディレクトリの.ssh/
内にid_rsa
(秘密鍵)、id_rsa.pub
(公開鍵)が生成されます。
$ ssh-kegen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
次に鍵のパスフレーズの設定を聞かれます。空白にするとパスフレーズなしの鍵になります。パスフレーズは万が一秘密鍵が流出した時のセキュリティとして使えるので、できるだけ設定するべきだと思います。
鍵の名前を変える
デフォルト名の鍵でもいいのですが、いろんな鍵の管理をしているとデフォルト名は管理しにくいので@MINOは使う先に合わせて名前を変えています。
ただ秘密鍵にわかりやすい名前をつけるのはセキュリティ上どうかと思うので、そのへん工夫したほうが良いように思います。(githubなんて名前つけたらGitHub用の鍵だと推測される)
名前を変える際は鍵の名前と保存先を聞かれた時に指定します。ちゃんとパスを指定しないと~/.ssh
ではなく、カレントディレクトリに鍵ができてしまうので注意です。
またパスは絶対パスでの指定が必要なようデス。
$ ssh-kegen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/(username)/.ssh/id_rsa):/home/hoge/.ssh/mykey
パスフレーズを設定はさっきと同じです。
鍵を登録する
鍵を登録します。GitHubメニューのsettingからSSH keysに行きます。
New SSH Keyボタンを押すと公開鍵の登録画面になります。
Titleは鍵の管理のためのGitHub上での名前です。任意で構わないと思います。
Keyは公開鍵の本体です。ここに鍵を貼り付けます。
鍵の正体はテキストです。cat
コマンドで表示することができます。gui上でターミナルを使っているならcat
で表示、マウスで選択でコピーが楽かと思います。
$ cat .ssh/mykey.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDY/s6Q822RN2wCcm9HRLjqGXue7wJCnBOo49VrjCLUtWBIBrZnaJf0ZHF9S1zDTLyRsAHhPeo2nhzFZ1oSiGafqnnMlTNzDkgfE1z5bQZVUxfEecH6r6iIhvfTAaSm5vrDD57j2S80UU/9lKrHwhyMgnp9Hr4vpp/pakfB9aOejEF+mzdJhzqwcXJJkdFo+rzgnH8MocFuzkMLDIFMlzO7YSC0xvhZ0KUZeGGLgiZXfF9pmx9rpjaEKWKHDWqWCKEpgyKQLF9pDDoiTVN1Q5PMwJUwfyMyGTCpz1uOaq0IoHvd/Oqvm4CfSf09iC4gEQYcY3zNEDvAcRVclB3MwAHv mino@desk
貼り付けたら下にある緑のAdd SSH Keyボタンを押して鍵を登録を完了させます。
登録すると以下のような画面になります。鍵を登録した年月日と現在の状況(Added on 12 Mar 2016 — Never used)が表示されています。
まだこの鍵をつかって接続していないのでNever usedとなっています。接続テストをしてみましょう。
sshでGitHubに接続してみます。この際デフォルト名で鍵を作っている際は秘密鍵としてid_rsa
が検索されます。鍵を作った時に名前を変えている際はその名前の秘密鍵が検索されます。
鍵名を作成時でなく、あとで変えた場合は-i
オプションで秘密鍵の指定を行う必要があります(はず)。
$ssh git@github.com
PTY allocation request failed on channel 0
Hi Mino-hub! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
接続できました。接続が一度成功すると鍵の横が●になります。
これでGitHubにSSHので接続することができるようになりました。ガシガシ接続してやりましょう。
補足
パスフレーズについてです。
passphraseのphraseはweblioで調べてみると
- 句、成句、熟語、慣用句、決まり文句、言い回し、語法、言葉づかい、名言、警句
と言ったような意味があります。
対して
passpwordのwordは
- 語、単語、(口で言う)言葉、話、談話、言葉、口論、知らせ、便り、消息
といった意味になるようです。
このことからパスワードは単一の言葉であり、パスフレーズは句(文章としてもいいかも)であってよいというこのようです。
クラックされないためには長いパスワードが必要になりますが、ランダムの長い単語は覚えにくいものです。
十分長ければ覚えやすい「文章」をパスワードと使うのもありだよね、ということで頻繁に入力する必要のあるSSHkeyにはパスフレーズを用いることになったようです。
銀河英雄伝説でイゼルローン再奪取作戦の際に使われた
- 「健康と美容のために、食後に一杯の紅茶」 「ロシアン・ティーを一杯。ジャムではなくママレードでもなく蜂蜜で」
という凍結・解除コードはまさにパスフレーズなのだと思います。
何文字(単語)のパスフレーズなら安全?
実際に何文字くらいがいいかですが、MicroSoftの以下のページでは20〜30個の文字を使ったパスフレーズを推奨しているようです。
また以下の記事では「7つの単語」をつかったパスフレーズであれば当面の間は安心とのことです。
パスフレーズは秘密鍵が流出した場合の最後の砦なので、クラックされやすい短い単語ではなく、「パスフレーズ」として設定するのが良いようですよ。
後記
@MINOもいっちょまえにGitHubにアカウントをつくってみて、いろいろ使っています。
GitHubは本来のサービスとしても、コード閲覧の場としてもいいですね。
@MINOの様に一人でプログラミングの勉強をしていると、どうしても他の人のコードをみる絶対量が少ないですが、GitHubがあるとしこたまコードを勉強することができます。
良い時代です。