起因
一直在使用 vscode + remote-ssh 连到服务器上开发,按照网上的教程配置了公钥登录,使用 root 用户可以免密登录,使用普通用户总是显示权限不对,vscode 的报错:Permission denied (publickey,password)…过程试图写入的管道不存在…之类的
排查方法
根据上面的报错我在网上搜索,发现了一个展示 ssh 错误日志的方法:
- 在服务器上输入:
sudo /usr/sbin/sshd -p 10022 -d
-d 表示开启调试模式
- 然后在你本地机器上输入:
ssh -v usename@ip -p 10022
到这里服务器上就会打印出具体的错误了,我这里忘记截图了,一共有两个问题:
- home 目录权限有问题
- authorized_keys 之类的文件权限有问题
解决方法
tips: 之所以会出现权限问题是因为 ssh 对于密钥权限的检查非常严格,只有文件所属用户才能读写,防止其他用户读取
- home 目录问题:
估计是我添加用户以及家目录的时候方法有问题,导致家目录权限是 777,可以通过下面命令解决
chmod 755 $HOME
还要注意 $HOME 所属的用户和组要属于当前用户,否则会出现 zsh 无法写入历史记录之类的问题,如果你真的和我一样倒霉连这个问题都遇上了,可以参考zsh-permission-denied-reading-anyway 解决
2. authorized_keys 等权限问题:
通过下面命令解决
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys
如果通过以上步骤依然显示访问 authorized_keys 文件权限不对,还可以通过
restorecon -FRvv ~/.ssh
来解决,到这里我的问题全部解决完毕。
如果你直接使用我说的这些步骤尝试解决问题,很不幸最终没有解决问题,那么,请务必使用排查方法定位到具体的错误,很有可能虽然我们在 vscode 上报的错误差不多,但是真正的错误原因完全不同,下面我提几个其他可能的错误原因:
- 如果你用的是 windwos,那么有可能你本地的私钥公钥之类的权限太宽泛,导致出现什么…are too open 的问题,可以参考这篇文章
- 也有可能是远程服务器的 know_hosts 里的信息跟本地记录的信息不一致,可以参考这篇文章
为了解决这个问题我花了将近一天的时间,最后恨不得重装服务器,接下来还是得花时间了解一下 Linux 的权限机制,之前一直觉得这块好繁杂,结果这次在这块栽了
参考:建议都看
zsh-permission-denied-reading-anyway
ssh permissions error
debug1: Could not open authorized keys
SSH 教程