解决 ssh 普通用户无法通过密钥登录的问题

起因

一直在使用 vscode + remote-ssh 连到服务器上开发,按照网上的教程配置了公钥登录,使用 root 用户可以免密登录,使用普通用户总是显示权限不对,vscode 的报错:Permission denied (publickey,password)…过程试图写入的管道不存在…之类的

排查方法

根据上面的报错我在网上搜索,发现了一个展示 ssh 错误日志的方法:

  1. 在服务器上输入:
sudo /usr/sbin/sshd -p 10022 -d

-d 表示开启调试模式

  1. 然后在你本地机器上输入:
ssh -v usename@ip -p 10022

到这里服务器上就会打印出具体的错误了,我这里忘记截图了,一共有两个问题:

  1. home 目录权限有问题
  2. authorized_keys 之类的文件权限有问题

解决方法

tips: 之所以会出现权限问题是因为 ssh 对于密钥权限的检查非常严格,只有文件所属用户才能读写,防止其他用户读取

  1. 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 上报的错误差不多,但是真正的错误原因完全不同,下面我提几个其他可能的错误原因:

  1. 如果你用的是 windwos,那么有可能你本地的私钥公钥之类的权限太宽泛,导致出现什么…are too open 的问题,可以参考这篇文章
  2. 也有可能是远程服务器的 know_hosts 里的信息跟本地记录的信息不一致,可以参考这篇文章

为了解决这个问题我花了将近一天的时间,最后恨不得重装服务器,接下来还是得花时间了解一下 Linux 的权限机制,之前一直觉得这块好繁杂,结果这次在这块栽了

参考:建议都看

zsh-permission-denied-reading-anyway
ssh permissions error
debug1: Could not open authorized keys
SSH 教程

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

thewangcj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值