问题现象
远程登录失败:使用第三方 SSH 客户端(如 PuTTY, Xshell, SecureCRT)连接 Linux 实例时,客户端提示
Access denied或Permission denied, please try again.错误。系统安全日志:系统日志
/var/log/secure中包含not allowed because等相关信息。
问题原因
默认情况下,Linux 实例的 SSH 服务允许系统上所有用户账户通过凭证(密码或密钥)进行登录。当SSH服务配置文件/etc/ssh/sshd_config中启用了登录限制策略时,配置不当会导致特定用户无法登录实例。
AllowUsers:用户白名单,仅允许列表中的用户登录。
DenyUsers:用户黑名单,拒绝列表中的用户登录。
AllowGroups:用户组白名单,仅允许列表中的用户组中的用户登录。
DenyGroups:用户组黑名单,拒绝列表中的用户组中的用户登录。
拒绝策略(Deny*)的优先级高于允许策略(Allow*)。如果一个用户同时满足允许和拒绝的条件,该用户将被拒绝登录。
解决方案
通过VNC连接登录ECS实例。
访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。
进入目标实例详情页,单击远程连接,选择通过VNC远程连接。输入账号和密码,登录ECS实例。
检查并修改SSH配置文件。
备份配置文件,以便在修改错误时快速恢复。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak定位并调整访问控制策略。
sudo vi /etc/ssh/sshd_config选择以下任一方式进行修改:
方式一:注释所有限制规则
若不需要登录限制,在
AllowUsers、DenyUsers、AllowGroups以及DenyGroups参数行的行首添加#符号将其注释掉,让所有系统用户都能登录。# AllowUsers userA userB # DenyUsers userC方式二:修正限制规则
为确保策略的明确性,应避免同时使用白名单(Allow*)和黑名单(Deny*)规则。
使用白名单策略(用于只允许少数用户登录的场景)
仅保留
AllowUsers或AllowGroups参数,将需要登录的用户或用户组添加到列表中,同时注释或删除所有Deny*参数。AllowUsers userA userB newUser # DenyUsers userC以上示例表示仅允许
userA、userB、newUser三个用户登录,其他所有用户都无法登录。使用黑名单策略(用于只拒绝少数用户登录的场景)
仅保留DenyUsers或DenyGroups参数,将需要禁止登录的用户或用户组添加到列表中,同时注释或删除所有
Allow*参数。# AllowUsers userA userB DenyUsers userC userD以上示例表示拒绝
userC、userD用户登录,其他所有用户都可以登录。
重启SSH服务,使配置生效。
sudo systemctl restart sshd.service若启动报错,可通过
cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config命令恢复原配置文件。使用第三方SSH客户端重新登录实例,验证登录是否正常。