背景
僕たち初心者はファイルがエクスプローラーで見えないと不安になります. だからWSLを入れたときにホームディレクトリをエクスプローラーで見える場所に変更した人は多いはずです.
WSLのホームディレクトリの変更手順は https://qiita.com/funafuna/items/c3bb78a546cf2605205d にわかりやすく解説されています.
ところがWindows支配下のファイルはすべてのユーザにrwxが許可された状態になっており, chmodで変更することができません. (Windowsから見えるということはそういうことだからでしょうか...?)
僕はこれを知らずにホームディレクトリに$ ssh key-gen -t rsa
で鍵を作成してしまいました. するとなんということでしょう~外部サーバーに接続する際
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for 'XXX/.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 "XXX/.ssh/id_rsa": bad permissions
などとおどろおどろしいエラーが出てしまったではありませんか!
どうやら鍵のpermissionがあかんとのことなので.sshの中に入ってls -l
すると
drwxrwxrwx 1 ユーザー名 ユーザー名 XXXX Month Date Time id_rsa
drwxrwxrwx 1 ユーザー名 ユーザー名 XXXX Month Date Time id_rsa.pub
drwxrwxrwx 1 ユーザー名 ユーザー名 XXXX Month Date Time known_hosts
う~ん, そらあかんわなと. ところが先述のとおりchmodできないのでどうしたものかと...
その解決方法を僕の先生が教えてくださったので共有します!
シンボリックリンクを貼って解決する
Linuxの支配下に.sshを移動してchmodし, ホームディレクトリには.sshへのシンボリックリンクを残しておきます. シンボリックリンクとはショートカットのようなもので, こうすればサーバー接続時, ホームディレクトリの.sshが参照されると自動的にLinuxの支配下の.sshに飛ばされてpermissionが制限された鍵が参照されることになります.
僕はWSLをインストールしたときの初期のホームディレクトリのhome
というディレクトリ下のユーザー名と同じ名前のディレクトリに.sshを移しました.
$ mkdir /home/ユーザー名/.ssh
$ cd #ホームディレクトリに移る
$ cd .ssh
$ mv * /home/ユーザー名/.ssh/
$ cd /home/ユーザー名/.ssh/
$ chmod -x *
$ chmod 644 id_rsa.pub
$ chmod 644 known_hosts
$ chmod 600 id_rsa
$ ls -la
-rw------- 1 ユーザー名 ユーザー名 XXXX Month Date Time id_rsa
-rw-r--r-- 1 ユーザー名 ユーザー名 XXXX Month Date Time id_rsa.pub
-rw-r--r-- 1 ユーザー名 ユーザー名 XXXX Month Date Time known_hosts
#permission変更がうまく行っているか確認
$ cd ..
$ chmod 700 .ssh/
$ ls -la
drwx------ 1 ユーザー名 ユーザー名 XXXX Month Date Time .ssh
#permission変更がうまく行っているか確認
$ cd #ホームディレクトリに移る
$ rmdir .ssh/ #ホームディレクトリの.sshを削除
$ ln -s /home/ユーザー名/.ssh . #カレントディレクトリ(ホームディレクトリ)に/home/ユーザー名/.sshへのシンボリックリンクを貼る
$ ls -la
lrwxrwxrwx 1 ユーザー名 ユーザー名 XXXX Month Date Time .ssh -> /home/ユーザー名/.ssh
#これがあればOK!
以上でサーバーに接続できるようになったはずです.
シンボリックリンクを作成するコマンドln -s リンク先 リンクを置く場所
では指定をしない限りリンク先のディレクトリと同じ名前のシンボリックリンクが作成されます. たとえばめちゃくちゃ離れた場所にアクセスしたいディレクトリがあって毎回パスを指定するのが面倒なときは
ln -s めちゃくちゃ離れた場所/example リンクを置く場所
などとしておけば次からはリンクを置く場所でexample
と指定すればめちゃくちゃ離れた場所/example
にアクセスできます. 便利ですね!