背景
WSLで.ssh/configを設定してsshを実行したとき,
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/mnt/c/ubuntu/home/ユーザ/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/mnt/c/ubuntu/home/ユーザ/.ssh/id_rsa": bad permissions
git@ssh.github.com: Permission denied (publickey).
のようなエラーが発生して困ったときのメモ.
状況
WSLにおけるホームディレクトリをデフォルトの"/home/ユーザ名"ではなくwindows側の"/mnt/c/ubuntu/home/ユーザ名"にしている.
解決策
時間がない人は本命解決策2を見てください
解決策1
このようなエラーが出たときはまず最初にchmod 600 ~/.ssh/config
とすれば解決する.
しかし,これはホームディレクトリがlinux側の場合のみ有効である.
今回はwindows側にホームディレクトリがあるため,これではだめ.(そもそもwindowsは他の人からアクセスされることを想定していないため,パーミッションとかフルオープン)
本命の解決策2
追記
シンボリックリンクでも解決することがわかったので
後ろの本命の解決策3で解説しています.
- まず,デフォルト(linux側)のホームディレクトリにいったん移動します.
$ cd /home/ユーザ名
ここで,新しくsshkeyを生成します.(古いやつコピーしても大丈夫だと思いますが,試していません)
- sshkey生成
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
生成されたsshkeyが以下のディレクトリにあることを確認しましょう
/home/ユーザ名/.ssh/id_rsa
このファイルのパーミッションを確認してみるとしっかり制限されていることがわかります.
$ ls -l /home/ユーザ名/.ssh
total 8
-rw------- 1 ユーザ名 ユーザ名 1675 Oct 6 00:40 id_rsa
-rw-r--r-- 1 ユーザ名 ユーザ名 402 Oct 6 00:40 id_rsa.pub
-rw-r--r-- 1 ユーザ名 ユーザ名 884 Oct 6 00:45 known_hosts
-
githubに生成したid_rsa.pubを登録します.
ここでは詳細については割愛します. -
次に,windows側のホームディレクトリに戻り,
先程生成したid_rsaの方を読み込めるように~/.bashrc
追記します.
#SSH
eval `ssh-agent` > /dev/null
ssh-add /home/ユーザ名/.ssh/id_rsa >& /dev/null
ここで> /dev/nullはターミナル起動時にsshkeyが追加されたことお知らせするメッセージを表示しないようにつけました.
あとは,bashrcを再読込するだけでgitのsshが使えるようになっています.
$ source ~/.bashrc
以上です.
本命の解説3
linux側でssh-keyを生成するところまでは一緒です.
変更点は,.bashrc
に追加しないでシンボリックリンクを作成する点です.
- linux側への.sshのシンボリックリンクを作成
$ ln -s /home/ユーザ名/.ssh ~/
このように設定することで勝手にlinux側の.sshを見に行くので今まで通り使えるようになると思います.