10
8

More than 3 years have passed since last update.

[WSL] Windows支配下に公開鍵, 秘密鍵を作ってしまうとpermissionを変更できない!

Last updated at Posted at 2019-12-11

背景

僕たち初心者はファイルがエクスプローラーで見えないと不安になります. だから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にアクセスできます. 便利ですね!

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8