SSH登录问题小结
本文最后更新于 2025年4月17日 早上
背景
登录远程CentOS服务器的时候,出现了好几次登录不上的情况,提示语如下 <user>@<host>: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
,其中<user>,<host>
是我的用户账号和主机地址,这里保密做了隐藏。
在网上查了很多资料,基本上说的是没有将PasswordAuthentication
设为on
,改PubkeyAuthentication yes
,还有UsePAM yes
的,也有的说到了权限问题等等。因为我遇到的情况不同,有的解决了问题有的没有解决,但最终都解决了,这里记录下小心得。
PS:操作系统是CentOS,其他的可能略有不同。
排查
应该来说,网上的答案有的时候确实能解决问题,但是不排除有瞎猫碰到死耗子的情况,因为我也确实碰到了没有解决掉的时候。直到最后我碰到了最终的神器命令:journalctl
。
journalctl的作用是查询系统journal(不知道该怎么翻译,旅程?),使用-u
选项可以制定监测单元,对于ssh连接来说,参数是sshd
,-n
选项确定查看日志条数,-f
选项可以持续刷新日志。比如,命令:journalctl -u sshd -n 20 -f
就可以查看最新的20条关于sshd的系统记录。
只要能够进入远程服务器(阿里云、腾讯云都有自己的web版终端),就可以通过这个查看到底是什么原因无法通过SSH连接的。
就我目前遇到的情况,需要检查这么几项:
- 确保保存在服务器端的公钥没有问题,位置也正确,如果没有改的话公钥是储存在
/home/<username>/.ssh/authorized_keys
文件里面的。 - 用户名下的
.ssh
和authorized_keys
文件的所有者和权限有没有问题,为了安全起见,如果其他用户拥有的权限过多,SSHD服务是会直接拒绝连接的。600就行。 - 在
/etc/ssh/sshd_config
下存在sshd的相关配置,里面也有几个要注意的:HostKey
主机key,只需要一个也就够了,我偏向于选择rsaPubkeyAuthentication
应当是yesPermitRootLogin
为了安全,建议选择noAllowUsrs
允许哪些用户登录,如果启用了这个选项,即使PermitRootLogin
是yes,这里不添加root账户的话,也是不允许root登录的