前言

Linux 使用过程中遇到最多的坑就是权限设置错误,而 WSL ( Windows Subsystem for Linux ) 作为一个 Linux 环境也不例外。

错误日志

Bad owner or permissions on /home/p3terx/.ssh/config
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/mnt/d/KEY/P3TERX' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/mnt/d/KEY/P3TERX": bad permissions
p3terx@*******: Permission denied (publickey).

分析问题

问题起因是我直接复制了 Windows 下 Git Bash 所使用的 SSH 配置文件,并修改了配置文件中私钥文件路径为 DrvFs 中的路径。而 DrvFs 文件系统权限问题会导致这两个文件的权限为777

解决方案

Linux 中的 SSH 配置文件的正确权限是600,SSH 私钥的正确权限是400,所有者必须是当前用户。

由于 WSL 通过 DrvFs 无法真正的设置文件权限,所以必须将私钥文件复制到 WSL 中的~/.ssh目录中,然后再设置权限:

chmod 400 ~/.ssh/id_rsa

设置 SSH 配置文件权限:

chmod 600 ~/.ssh/config

设置文件所有者:

chown $USER ~/.ssh/.

参考资料

ssh returns "Bad owner or permissions on ~/.ssh/config"

ssh "permissions are too open" error