前言
Linux 使用过程中遇到最多的坑就是权限设置错误,而 WSL (Win­dows Sub­sys­tem for Linux) 作为一个 Linux 环境也不例外。

错误日志

1
Bad owner or permissions on /home/p3terx/.ssh/config
1
2
3
4
5
6
7
8
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/xxx/.ssh/rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/xxx/.ssh/rsa": bad permissions
user@*******: Permission denied (publickey).

分析问题

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

解决方案

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

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

1
chmod 400 ~/.ssh/id_rsa

设置 SSH 配置文件权限:

1
chmod 600 ~/.ssh/config

设置文件所有者:

1
chown $USER ~/.ssh/.

参考资料

ssh returns “Bad owner or permissions on ~/.ssh/config”
ssh “permissions are too open” error