LoginSignup
21
23

More than 5 years have passed since last update.

WSLの設定からSSH接続まで

Last updated at Posted at 2019-02-09

1 はじめに

WSL(Windows Subsystem for linux)のUbuntuをインストールしてから使いやすくするまでの設定を行い、awsサーバにSSH接続するまでに紆余曲折があったので備忘録を兼ねて投稿します。本当に書きたかった備忘録は最後のというマウントがうまくいかず、sudo chmodsudo chownができなかったことです。

2 環境

Windows 10 Home バージョン1803
Ubuntuアプリ(Ubuntu 16.04.5 LTS (Xenial Xerus))

あとで書くパーミッションの設定や所有者の変更がバージョン1803以降の対応とのことなので必須です。

3 前提

Ubuntuを導入し、アプリを初めて起動するまではいろんなところに書いてあるので割愛します。また、以下最初に登録するユーザー名をuser_nameと代表して書くことにします。

Windowsのファイルの扱い

アクセス方法

WSLでWindowsのCドライブやDドライブにアクセスするためのアドレスは、/mnt/c/mnt/dです。ここにcdなどで移動すれば普段Windowsの環境で作成しているデータにアクセスすることができます。

WindowsとLinux、WSLのファイルやディレクトリの扱いの違い

Windows

Windowsの環境で、管理者のアカウントでログインしているときに生成したファイルやディレクトリのパーミッションはすべて777、つまりrwxrwxrwxです。さらに、所有者はroot、グループもrootになります。

Linux

Linuxの環境でのパーミッションは、ディレクトリを作成するときはふつう755、つまりdrwxr-xr-xであり、ファイルは644、つまり-rw-r--r--です。つまり、WindowsのデフォルトとLinuxの普通の環境で使うものでは大きな乖離があります。

WSLのデフォルト

さらに、WSLで特に設定しなかった場合、WSLのUbuntu上でもWindows環境と同じくすべて777になるということも覚えておく必要があると思います。また、WSL上でファイルやディレクトリを作成したときは所有者もグループもuser_nameになります。

また、デフォルトのホームディレクトリの場所は/home/user_name/であり、これは/etc/passwdの中の
/etc/passwd
user_name:x:1000:1000:,,,:/home/user_name:/bin/bash

とデフォルトでは規定されています。

4 パーミッションの設定を行う方法

Linuxのようにパーミッションや所有者の変更を行うsudo chmodsudo chownを実行するためには/etc/wsl.confに以下のものを用意し、

/etc/wsl.conf
[automount]
enabled = true
options = "metadata, umask=22, fmask=11"
mountFsTab = false

ホームディレクトリ直下にある.profile

/home/user_name/.profile
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
# umask 022

と書いてあるので次のように最後に書いておき、

/home/user_name/.profile
umask 022

以下のコードの実行が必要です。

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata

これでいったんCドライブのマウントを解除し、その後オプション付きでマウントしなおすことでパーミッションや所有者の変更ができるようになります。(1つめのアンマウントは/etc/wsl.confの1行目を削除すればいいかもしれませんね)

これを自動化することができなかったので自分は現在仕方なく、

.set_up_permission_operate
sudo umount /mnt/c ; sudo mount -t drvfs C: /mnt/c -o metadata

という内容のファイルを作成しこれを実行するエイリアスを作成して実行しています。

5 SSHの接続

ここまでお膳立てしなくてもよいですが、次にSSHでサーバに接続したいと思います。このときに、鍵を指定してssh -i (鍵) (アドレス)とするとアクセスしたいですが、この鍵がWindows環境で準備したときの場合、以下のようにエラーが出て接続できません。

Load key "鍵の名前": Permission denied
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

理由は単純で、パーミッションが開きすぎているからです。

したがって、SSHしたい鍵については、鍵のパーミッションを600に、その鍵が存在するディレクトリのパーミッションを755に変更します。

これで接続できました。

6 罠

Linux環境のホームディレクトリはデフォルトでは/home/user_name/ですが、これを使いやすくするために最低限の安全性を確保するためにCドライブ直下の/mnt/c/linux_home_dirなどをホームディレクトリとして設定し、

user_name:x:1000:1000:,,,:/mnt/c/linux_home_dir:/bin/bash

とする方法があると思います。しかし、これが少しだけ罠で、当然ですがcdなどでカレントディレクトリをCドライブの中にしていたり、上記の設定をしていて起動直後にCドライブの中にいたりして、この状態でsudo chmodなどを使うようにするための設定を行おうとすると、以下のエラーが出ます。

$ sudo umount /mnt/c
umount: /mnt/c: target is busy
        (In some cases useful info about processes that
         use the device is found by lsof(8) or fuser(1).)
mount: C: is already mounted or /mnt/c busy
       C: is already mounted on /mnt/c

この理由を探ると以下になります。

$ fuser -muv /mnt/c
Cannot open /proc/net/unix: No such file or directory
                     USER            PID ACCESS COMMAND
/mnt/c:              root         kernel mount (root)/mnt/c
                     user_name     19154 ..c.. (user_name)bash

rootユーザーとuser_nameが悪さをしているというわけです。ちなみにkillを用いてuser_nameのほうを終了させるとUbuntuアプリが落ちます。当然ですね。

前振りから明らかだとは思いますが、理由はUbuntuアプリのカレントディレクトリがCドライブ内だからです。気を付けてください。

参考

21
23
2

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
21
23