使用SSH连接CentOS 7.9提示Permission Denied,该如何解决?
我来帮你一步步捋清楚这个问题——CentOS上root用SSH登录被拒的情况太常见了,主要绕着SSH配置、密钥/密码验证这几个核心点排查就行:
1. 先确认服务器端允许root登录
首先你得能通过其他方式进入服务器(比如有普通用户权限的话,用sudo切换到root),然后修改SSH的配置文件:
- 编辑
sshd_config:sudo vi /etc/ssh/sshd_config - 找到
PermitRootLogin这一行,确保它的值是yes(如果是prohibit-password,那意味着只能用密钥登录,密码登录会被直接拒绝) - 如果想用密码登录,还要确认
PasswordAuthentication设为yes - 修改完记得重启SSH服务生效:
sudo systemctl restart sshd
2. 排查密钥验证的问题(如果用密钥登录)
如果你是通过密钥登录的方式,得确保本地密钥和服务器端匹配,同时权限设置绝对正确:
- 检查服务器root用户的
~/.ssh/authorized_keys文件里,有没有你的本地公钥内容(本地公钥一般在~/.ssh/id_rsa.pub里) - 重点检查权限!这是很多人踩坑的地方:
~/.ssh目录权限必须是700:chmod 700 ~/.sshauthorized_keys文件权限必须是600:chmod 600 ~/.ssh/authorized_keys- 这两个文件/目录的所有者必须是root:
chown root:root ~/.ssh/authorized_keys
- 本地端可以试试加载私钥到ssh-agent:
ssh-add(如果私钥设了密码,输入密码就行)
3. 开启详细日志定位问题(上面方法都没用的话)
如果还是搞不定,就开详细日志找根因:
- 服务器端修改
sshd_config,把LogLevel改成VERBOSE,然后重启sshd - 本地连接时用
ssh -v -p 22 root@ip,看输出里的每一步细节——比如是密钥验证失败、密码被拒绝,还是配置不允许,一目了然
4. 其他可能的小坑
- 防火墙有没有开22端口?CentOS用firewalld的话,先查
sudo firewall-cmd --list-services,如果没看到ssh,就添加:sudo firewall-cmd --add-service=ssh --permanent,然后firewall-cmd --reload - SELinux搞事情?可以临时关了试试
sudo setenforce 0,如果能登录了,再修复SELinux上下文:restorecon -Rv ~/.ssh
按照这些步骤走下来,大部分情况都能解决。要是还不行,把ssh -v的输出贴出来,能更快定位问题。
内容的提问来源于stack exchange,提问作者Sajjad Serajzadeh




