はじめに
- WSLの環境構築中、SSH設定で、見事にハマって3時間ほど浪費した
- 色々と気付くことがあったので、Qiitaに初投稿することにした
対象読者
- WSLユーザで、「
mnt/c
にhomeを置きたい!」と考えている方
必ずハマるので是非読んで!
ポイント
- WSLには、Linuxのファイル領域と、Windowsのファイル領域がある
-
mnt/c
以下の領域は、Windowsのファイル領域
-
- Windowsには、パーミッションの概念がない
- Windows領域のファイルのパーミッションは、
777
のガバガバ状態になっている - パーミッションを変更しようとしても、うまく行かない
- Windows領域のファイルのパーミッションは、
-
.ssh
は、Linux領域に配置する- SSHは、ファイル(特に秘密鍵)のパーミッションがガバガバだと、エラーが出る
- パーミッションを変更したくても、Windowsのファイル領域に置いてあると、うまく行かない
- homeを
mnt/c
に置きたい場合-
.ssh
などパーミッション設定が必要なものは、Linux領域に置く - homeにはシンボリックリンクを貼る
-
経緯
- WSLの開発環境を整備する
- homeが見えない所にあるのが気に食わなかったので、
mnt/c
に作成したディレクトリにhomeを移す- 振り返るとこれが全てのゴタゴタの始まりだった。。。
発生した問題
問題1 gitからSSHでCloneしようとすると、パーミッションの問題で拒絶される
Bad owner or permissions on /mnt/c/wsl_home/.ssh/config
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
- 最初はconfigのパーミッションだけだったが、後々秘密鍵のパーミッション問題まで出てくる...
問題2 パーミッションが意図通り変更できない
根本原因
- 「sshの秘密鍵を、パーミッションの設定ができないWindowsのファイルシステム上に置いていたこと」が原因だった
- Linuxから見ると、パーミッションが777のガバガバ設定になっていたので、怒られていた
- homeを
mnt/c
(Windows領域)から、/home/[Username]
(Linux領域)に移動すれば解決する
とはいえ、使いやすいようにわざわざmnt/c
にhomeを作ったので、変えたくない!
解決策
-
.ssh
は、Linux領域に配置し、homeには、シンボリックリンクを置く- ファイル自体はLinux領域にあるので、パーミッションの設定が可能
- homeにはシンボリックリンクがあるので、通常と変わらずに色々できる(はず)
- 設定も散らばらないので、メンテも楽なはず
bash
# 新しいhomeにあった.sshを元のhomeへ移す
cd ~
mv .ssh /home/[username]/.ssh
# シンボリックリンク作成
cd ~
ln -s /home/[username]/.ssh .ssh
結果
homeの状態
git cloneも無事成功!
やったぜ!