問題
WindowsからWSLのSSHで公開鍵(.pem
)を使ってログインしようとした際、pemファイルのパーミッションがowner以外から読み出し可能になっていると、OpenSSHが以下のようなエラーメッセージを出して接続に失敗する。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Windowsだと、ブラウザからNTFS上のディレクトリにダウンロードしたファイルのパーミッションはWSLから見るとデフォルトで777になるので、AWS EC2接続用のpemファイルをダウンロードしたときなどにこのメッセージを見ることがある。
stackoverflow.com
ここで、WSLでsudo chmod 400
を実行すると、pemファイルのパーミッションが400にならず、なぜか555とかになってしまう。chmod
コマンド自体も特にエラー等は返さない。
satob@K690XN:/mnt/c/tmp$ ls -la x.pem
-rwxrwxrwx 1 satob satob 387 Mar 18 00:23 x.pem
satob@K690XN:/mnt/c/tmp$ sudo chmod 400 x.pem
satob@K690XN:/mnt/c/tmp$ ls -la x.pem
-r-xr-xr-x 1 satob satob 387 Mar 18 00:23 x.pem
satob@K690XN:/mnt/c/tmp$
原因
WSLで/mnt/
以下のファイルに対してchmod
を実行した場合に上記の挙動になる模様。
対策
WSLで/home/
以下のディレクトリにpemファイルをコピーしたあとにchmod
を実行すれば、正しくパーミッションを400に設定できる。
注意事項
Stack Overflowなどで検索すると、PowerShellからicacls.exe
を実行する方法が回答として挙げられていたが、自分の環境ではいずれもWSLから見たときのパーミッションは400にならなかった。
superuser.com
上記を実行するとパーミッションは400でなく444になった。
PS C:\tmp> icacls.exe x.pem /inheritance:r
処理ファイル: x.pem
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\tmp> icacls.exe x.pem /grant:r "$($env:username):(r)"
処理ファイル: x.pem
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\tmp>
satob@K690XN:/mnt/c/tmp$ ls -la x.pem
-r--r--r-- 1 satob satob 387 Mar 18 00:23 x.pem
しかも、そのあとWSLでchmod
を実行しようとすると、sudo
しているのにPermission denied
が返るようになった(原因不明)。
satob@K690XN:/mnt/c/tmp$ sudo chmod 400 x.pem
chmod: changing permissions of 'x.pem': Permission denied
superuser.com
上記を実行するとパーミッションは400でなく555になった。
PS C:\tmp> icacls.exe x.pem /c /t /Inheritance:d
処理ファイル: x.pem
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\tmp> icacls.exe x.pem /c /t /Grant ${env:UserName}:F
処理ファイル: x.pem
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\tmp> TakeOwn /F x.pem
成功: ファイル (またはフォルダー): "C:\tmp\x.pem" は現在ユーザー "K690XN\SATOB" によって所有されています。
PS C:\tmp> icacls.exe x.pem /c /t /Grant:r ${env:UserName}:F
処理ファイル: x.pem
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\tmp> icacls.exe x.pem /c /t /Remove:g Administrator "Authenticated Users" BUILTIN\Administrators BUILTIN Everyone System Users
処理ファイル: x.pem
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
PS C:\tmp> icacls.exe x.pem
x.pem K690XN\SATOB:(F)
1 個のファイルが正常に処理されました。0 個のファイルを処理できませんでした
satob@K690XN:/mnt/c/tmp$ ls -la x.pem
-r-xr-xr-x 1 satob satob 387 Mar 18 00:23 x.pem
上記いずれの場合も特にエラーメッセージが返ることはなく、エクスプローラからファイルのプロパティを確認すると所有者だけに権限がついている状態になっていたので、icacls.exe
の実行自体が失敗しているということはなさそうに見える。