在Linux服务器管理中,SSH(Secure Shell)是远程登录和管理服务器的核心工具,而密码登录作为最基础的认证方式,其安全性直接关系到服务器的整体安全,合理配置SSH密码登录,既能确保便捷的远程管理,又能有效抵御未授权访问,本文将从密码复杂度策略、SSH服务配置、登录限制、安全加固及日志审计五个方面,详细阐述服务器SSH密码登录的安全设置方法。

密码复杂度策略:筑牢第一道防线
密码是SSH认证的第一道关卡,若密码过于简单或使用常见组合,极易被暴力破解,设置强密码策略是保障安全的基础。
通过/etc/login.defs和/etc/pam.d/passwd文件统一系统密码复杂度要求,在login.defs中设置PASS_MIN_LEN 12(最小密码长度12位),PASS_MAX_DAYS 90(密码有效期90天);在pam.d/passwd中启用pam_cracklib.so模块,要求密码必须包含大小写字母、数字及特殊字符,并检测连续字符重复(如"aaa")或键盘顺序字符(如"123")。
定期强制用户更新密码,可通过chage命令设置密码过期提醒,例如chage -W 7 username(提前7天提醒用户修改密码),避免长期使用同一密码增加泄露风险,对于服务器管理员账户,建议采用密码管理器生成并存储高强度随机密码,避免人为记忆导致密码简化。
SSH服务配置:精细化控制登录行为
SSH服务的核心配置文件为/etc/ssh/sshd_config,通过修改该文件可实现对密码登录的精细化控制。
禁用root直接登录
默认情况下,SSH允许root用户直接登录,这大大增加了安全风险,建议禁用root直接登录,改为使用普通用户账户登录后,通过sudo提权执行管理命令,在sshd_config中设置PermitRootLogin no,并重启SSH服务:systemctl restart sshd。
限制密码登录方式
为提升安全性,可结合密钥认证与密码认证,并优先使用密钥认证,在sshd_config中设置PasswordAuthentication yes(启用密码登录),同时PubkeyAuthentication yes(启用密钥认证),并通过ChallengeResponseAuthentication no禁用基于挑战的响应认证(如S/KEY),减少认证漏洞。
修改默认SSH端口
默认SSH端口为22,攻击者常通过该端口发起暴力破解,可修改为非默认端口(如2222),在sshd_config中设置Port 2222,并确保防火墙开放新端口,需注意,修改后需通过-p参数指定端口登录:ssh -p 2222 username@server_ip。
登录限制:防暴力破解的关键措施
暴力破解是SSH密码登录面临的主要威胁,通过限制登录频率、来源IP及失败次数,可有效降低被破解风险。

使用fail2ban拦截恶意IP
fail2ban是一款基于日志的入侵防御工具,可通过监控SSH登录日志,自动封禁频繁失败的IP地址,安装后,编辑/etc/fail2ban/jail.local,配置SSH监狱规则:
[sshd] enabled = true port = 2222 filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 # 封禁1小时
配置完成后启动fail2ban服务:systemctl enable --now fail2ban,当同一IP连续3次登录失败时,将被自动封禁1小时。
限制登录来源IP
若服务器仅允许特定IP(如公司内网IP)访问SSH,可在sshd_config中设置AllowUsers或AllowGroups,或使用iptables/firewalld限制源IP,通过firewalld仅允许192.168.1.0/24网段访问SSH端口:
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.0/24 port protocol=tcp port=2222 accept" firewall-cmd --reload
配置登录超时与空闲断开
在sshd_config中设置ClientAliveInterval 300(每5秒发送一次保活包)和ClientAliveCountMax 0(允许0次保活失败),若客户端5分钟内无操作,将自动断开连接,避免长期占用会话资源。
安全加固:多维度提升防护能力
除基础配置外,还需通过系统级加固措施进一步强化SSH安全。
禁用空密码与危险账户
确保所有系统用户均设置密码,检查/etc/shadow中是否存在空密码账户(如user::开头的行),发现后立即使用passwd -l username锁定账户,对于闲置的测试账户或过期账户,及时删除或禁用。
使用SELinux/AppArmor强制访问控制
启用SELinux(CentOS/RHEL)或AppArmor(Ubuntu),限制SSH进程的文件访问权限,在SELinux中设置SSH仅允许读写必要目录:
setsebool -P sshd_disable_transitions on chcon -R -t sshd_sys_home_t /home/username
定期更新SSH软件版本
定期检查SSH软件版本(ssh -V),及时通过系统包管理器更新至最新版本,修复已知漏洞,在Ubuntu中运行sudo apt update && sudo apt upgrade openssh-server,在CentOS中运行sudo yum update openssh。

日志审计:追溯与异常检测
完善的日志审计是安全事件的追溯基础,需确保SSH登录日志记录完整并及时分析。
配置详细日志记录
在sshd_config中设置LogLevel VERBOSE,记录详细的登录信息,包括登录时间、IP地址、用户名及认证结果,日志文件默认位于/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS)。
定期分析登录日志
使用grep、awk等工具分析日志,检测异常登录行为,查看最近24小时内的失败登录尝试:
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr若发现同一IP高频失败登录,可手动封禁该IP或调整fail2ban规则。
集中日志管理
对于多台服务器,建议使用rsyslog或ELK Stack(Elasticsearch、Logstash、Kibana)将SSH日志集中存储,便于统一监控与分析,通过设置日志告警规则,当检测到异常登录模式(如短时间内多次失败)时,及时发送告警通知管理员。
SSH密码登录的安全配置是一个系统工程,需从密码策略、服务配置、访问控制、系统加固及日志审计等多维度入手,通过设置强密码、禁用root直接登录、限制登录来源、部署入侵防御工具及定期审计日志,可有效降低暴力破解和未授权访问风险,为服务器构建坚实的安全防线,安全配置需根据实际业务需求动态调整,并定期评估与优化,确保安全性与可用性的平衡。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/128515.html
