GitHub アカウントに SSH 公開鍵を登録する。
Windows 8 で SSH 公開鍵を作成しようとすると、何らかの SSH クライアントが必要になる。
SSH クライアントの候補はザッとこんな感じ:
- Cygwin
- MSysGit
- PuTTYgen
今回は過去にインストール済みの Cygwin を選んだ。
- Cygwin はデフォルトで ssh 関連のコマンドがインストールされないので、インストール時に Net カテゴリにある openssh を選択しておく必要がある。
- 最後に述べるが、SSH クライアントは Cygwin よりも MSysGit の方が良いかもしれない。
まず、以下のような手順で SSH 鍵を作成した。
- Cygwin の Bash (C:\cygwin\bin\bash.exe) を起動する。
- 【Bash】SSH 鍵作成コマンドを実行する。
- 【Bash】"Enter file in which to save the key (中略):"というメッセージが表示されたら、SSH 秘密鍵ファイルのパスを入力する。
- 【Bash】"Enter passphrase (empty for no passphrase):"が表示されたら、SSH 鍵用のパスフレーズを入力する。
- 入力しない場合、パスワードなしの SSH 鍵ができる。
- 【Bash】"Enter same passphrase again:"が表示されたら、同じパスフレーズを入力する。
- 【Bash】最後に以下のようなメッセージが表示されれば、SSH 鍵作成はひとまず完了。
Your identification has been saved (後略)
Your public key has been saved in (後略)
The key fingerprint is: (後略)
次に、以下のような手順で GitHub アカウントに SSH 公開鍵を登録した。
- 以下のページにアクセスして、「Add SSH Key」ボタンを押す。
- 「Title」テキストボックスに任意の文字列を入力する。
- 「Key」テキストボックスには以下の手順で文字列を貼り付ける。
- 「Add Key」ボタンを押す。
最後に、GitHub に SSH ログインを試みて、動作検証を行なったが、ここで問題が起きた。
以下のいずれかのコマンドで SSH ログインできるが、、
実行すると、以下のようなメッセージが表示された。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for '(中略)' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: (中略)
Permission denied (publickey).
要は、SSH 秘密鍵ファイルのアクセス権限が広過ぎるので狭くしなさい、と言っている。
Bash でファイルがあるディレクトリに移動して、"ls -l"コマンドで確認すると、こんな感じになっていた。
-rwxrwx---+ 1 (Windows ユーザー名) なし 1675 7月20 00:00 id_rsa
-rwxrwx---+ 1 (Windows ユーザー名) なし 391 7月20 00:00 id_rsa.pub
確かに SSH 秘密鍵ファイル(id_rsa)へのアクセス権限は 0770 と広めになっているが、もう一つ問題があって、それはグループ名が「なし」になっていることだった。
この状態で、"chmod 0600 id_rsa"コマンドを実行すると、以下のようになってしまう。
-rw-rw----+ 1 (Windows ユーザー名) なし 1675 7月20 00:00 id_rsa
-rwxrwx---+ 1 (Windows ユーザー名) なし 391 7月20 00:00 id_rsa.pub
つまり、アクセス権限を"0600"にしたつもりが、"0660"になってしまう。
"ls -v 0600 id_rsa"という様に -v オプションを付けて実行すると分かるが、Cygwin は変更したつもりでいる。。
この問題を解決するためには、以下のいずれかの様にファイルに何らかの所有グループ名を指定するコマンドを実行しなければならない。
ちなみに、グループ名は Windows マシンに存在するものでなければならないが、グループ一覧は以下の手順で確認できる。
- [Windows ロゴマーク]+[R]ボタンを押す。⇒【ファイル名を指定して実行】ダイアログが表示される。
- 【ファイル名を指定して実行】"lusrmgr.msc"を入力する。⇒【ローカルユーザーとグループ】ダイアログが表示される。
- 【ローカルユーザーとグループ】「グループ」をクリックまたはダブルクリックする。
ファイルの所有グループ名を Users にした後、再び"chmod 0600 id_rsa"コマンドを実行すると、以下のようになった。
-rw-------+ 1 (Windows ユーザー名) Users 1675 7月20 00:00 id_rsa
-rwxrwx---+ 1 (Windows ユーザー名) なし 391 7月20 00:00 id_rsa.pub
この状態で"ssh git@github.com"コマンドを実行すると、今度は以下のように正常終了した。
Enter passphrase for key '(中略)':
Hi (中略)! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
最後に余談。
上述は Cygwin での例だが、MSysGit で"ls -l"コマンドを実行すると、以下のようになった。
-rw-r--r-- 1 (Windows ユーザー名) Administ 1675 7月20 00:00 id_rsa
-rw-r--r-- 1 (Windows ユーザー名) Administ 391 7月20 00:00 id_rsa.pub
アクセス権限と所有グループ名が Cygwin で設定したものと異なっている。。
どちらかと言えば、MSysGit の方が状態を正しく表しているようにも見える。。
この状態で試しに MSysGit で"ssh git@github.com"コマンドを実行すると、アクセス権限の問題は発生せずに正常終了する。。
最初から MSysGit を使えば、ここまで苦労しなかったかも。。
参考資料:
- Generating SSH keys - User Documentation
- 初心者Git日記その五~GitHubにSSH公開鍵登録~ | SetucoCMSプロジェクト
- MacでSSH公開鍵・秘密鍵ファイルをコピーして使ったら警告がでた - アインシュタインの電話番号
- SSH Private Key Permissions using Git GUI or ssh-keygen are too open - Stack Overflow
- 最底辺プログラマ雑記 windows8でcygwinのchmod 600がうまくいかない
- Using Cygwin in Windows 8, chmod 600 does not work as expected? - Super User
- Chaz Littlejohn - Bug in Cygwin Windows 8 group permissions
- permissions - Using git through cygwin on windows 8 - Super User
- Windows 8でcygwinのSSH秘密鍵を使うとPermissions 0660 too openと怒られる | TechRacho
- ウィンドウズにSSHサーバーを入れよう!
- RSA公開鍵と秘密鍵の作成(Windows編) - Gentoo Linuxで自宅サーバ
関連記事: