SSH连接出现"Permission denied"的8种解决方法大全
作为Linux系统管理员或开发人员,SSH连接时遇到"Permission denied"错误是常见但令人头疼的问题。本文将深入分析导致该错误的8种主要原因,并提供详细的解决方案,帮助您快速恢复服务器连接。
一、密码错误导致拒绝访问
这是最常见的SSH连接被拒原因,当您看到类似以下错误时:
Permission denied (publickey,password).
解决方法:
- 确认用户名和密码是否正确(注意大小写)
- 尝试使用
-v参数获取详细错误信息:ssh -v user@host - 如果是root用户,检查
/etc/ssh/sshd_config中PermitRootLogin设置
二、SSH密钥认证问题
当配置了密钥认证但依然被拒绝时,可能出现:
Permission denied (publickey).
解决方法:
- 检查
~/.ssh/authorized_keys文件权限是否为600 - 确认公钥已正确添加到服务器端的
authorized_keys文件中 - 使用
ssh-add命令确保密钥已加载到ssh-agent - 检查
/etc/ssh/sshd_config中PubkeyAuthentication是否为yes
三、SELinux安全策略限制
在启用SELinux的系统上,可能出现因安全策略导致的连接拒绝。
解决方法:
- 临时禁用SELinux测试:
setenforce 0 - 永久禁用需修改
/etc/selinux/config文件 - 或使用
restorecon -R -v /home/username/.ssh恢复上下文
四、用户家目录权限问题
不正确的家目录权限会导致SSH拒绝连接:
Authentication refused: bad ownership or modes
解决方法:
- 确保用户家目录权限为755:
chmod 755 /home/username - .ssh目录权限应为700:
chmod 700 ~/.ssh - authorized_keys文件权限应为600:
chmod 600 ~/.ssh/authorized_keys
五、防火墙或网络限制
网络层面的限制也可能导致连接被拒绝。
解决方法:
- 检查服务器防火墙设置:
iptables -L或firewall-cmd --list-all - 确认SSH端口(默认22)已开放
- 检查云服务商的安全组规则
- 使用telnet测试端口连通性:
telnet host 22
六、PAM认证模块限制
PAM(Pluggable Authentication Modules)配置可能导致认证失败。
解决方法:
- 检查
/etc/pam.d/sshd配置文件 - 查看
/etc/security/access.conf访问控制列表 - 检查
/etc/nologin文件是否存在
七、SSH服务配置问题
错误的sshd配置会直接导致连接被拒绝。
解决方法:
- 检查
/etc/ssh/sshd_config主要参数:AllowUsers/AllowGroupsDenyUsers/DenyGroupsPasswordAuthentication
- 修改配置后重启sshd服务:
systemctl restart sshd - 查看sshd日志:
journalctl -u sshd
八、账户被锁定或过期
用户账户本身的问题也会导致连接被拒绝。
解决方法:
- 检查账户是否被锁定:
passwd -S username - 检查密码是否过期:
chage -l username - 解锁账户:
passwd -u username
总结与最佳实践
遇到SSH "Permission denied"错误时,建议按照以下步骤排查:
- 使用
ssh -v获取详细错误信息 - 检查服务器sshd日志:
/var/log/auth.log或journalctl -u sshd - 从简单到复杂逐项排查:密码→密钥→权限→配置→网络
- 保持SSH客户端和服务端版本更新
通过系统性的排查,大多数SSH连接问题都能得到解决。如果问题仍然存在,建议查阅更详细的系统日志或在技术社区寻求帮助。
