Bash on Windows (BoW) からの SSH

Bash on Windows (BoW) を導入している環境で SSH をしようとした際の設定です。また Windows の物と共通化出来ないのか試しましたが、これはうまくいきませんでした。

 

原因

BoW 上での / → Windows 上では C:\Users\{ユーザ名}\AppData\Local\lxss\
Windows 上での C:\ → BoW 上では /mnt/c

BoW 上でのホームディレクトリは /home/{ユーザ名} です。これは Windows 上では C:\Users\{ユーザ名}\AppData\Local\lxss\home\{ユーザ名} にあたります。

このときは使い始めなので BoW をよくわかっていませんでしたが、 BoW のユーザと Windows のユーザは別物です。ユーザもホームディレクトリも違うのですから確かに動かないわけです。

なお、Windows 側から Ubuntu 側のファイルの変更はしてはいけないようです。(Do not change Linux files using Windows apps and tools)

対処

諦めて Windows の方の .ssh フォルダの内容をコピーして持って来ます。

はじめ Windows の方のディレクトリに向かってシンボリックリンクを貼ってみたところ、一応 ssh は使えましたが known_hosts が更新されないなどいまいち上手くいきませんでした。また、実行前に Windows 側のファイルのパーミッションを変更する必要がありますが、どうも 777 や 555 と設定できるパーミッションが限られているようでした。

そのため、シンボリックリンクではなく単純にファイルをコピーして用いることにしました。

.ssh 内のファイルのパーミッション

さて、このままではパーミッションが正しくないために

Bad owner or permissions on /home/{ユーザ名}/.ssh/config

との警告が出てしまいます。Windows 側のファイルの所有者は root、アクセス権は 777 (rwxrwxrwx) になっているためです。

これを、適切なパーミッションに変更します。この部分の設定は一般の Linux と同様です。ssh-keygen で生成されたものを参考にしつつ同じように、.ssh フォルダを 700 に、秘密鍵を 600 に、それ以外の公開鍵や config 等を 644 にしておきます。

これで、設定を引き継ぎつつ Linux 上でやるのと同じように ssh の設定を行うことが出来ました。