SSH服务如何禁用密码登录

wen 网络安全 2

本文目录导读:

SSH服务如何禁用密码登录

  1. 目录导读
  2. 为什么必须禁用密码登录?
  3. 准备工作:确认SSH版本与备份配置
  4. 步骤详解:禁用密码登录的核心操作
  5. 密钥认证替代方案:从生成到部署
  6. 常见问题与问答
  7. 最终验证与安全建议

SSH服务安全加固:彻底禁用密码登录的完整指南

目录导读

  1. 为什么必须禁用密码登录?
  2. 准备工作:确认SSH版本与备份配置
  3. 步骤详解:禁用密码登录的核心操作
  4. 密钥认证替代方案:从生成到部署
  5. 常见问题与问答
  6. 最终验证与安全建议

为什么必须禁用密码登录?

在服务器安全运维中,SSH(Secure Shell)服务是最核心的远程管理通道。密码登录是黑客暴力破解的首要目标,根据多个安全机构统计,针对公网服务器的SSH暴力破解攻击平均每台每天超过1000次,禁用密码登录后,攻击者即使拥有密码也无法直接访问,极大降低了被“撞库”或“弱口令爆破”的风险。

关键威胁场景:

  • 弱口令爆破:常见密码如“123456”“password”可在数秒内被破解。
  • 凭证泄露:若数据库或日志泄露,密码可能被窃取。
  • 中间人攻击:密码传输过程若未加密(虽SSH已加密,但密钥更安全),仍存在风险。

核心原则:密钥认证优于密码认证——密钥对不易被猜测,且支持强加密算法(如Ed25519)。


准备工作:确认SSH版本与备份配置

在修改任何配置前,请先完成以下检查:

确认SSH服务状态

ssh -V  # 查看OpenSSH版本(建议≥7.0)
systemctl status sshd  # 检查服务运行状态

备份原始配置文件

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%Y%m%d)

此备份允许你在意外锁定时恢复文件(例如通过VNC或云控制台)。

确保当前已有密钥认证

若从未设置过密钥,请先完成密钥生成与部署(详见下一节),否则禁用密码后你将无法登录。


步骤详解:禁用密码登录的核心操作

修改sshd_config文件

使用编辑工具(如nanovim)打开配置文件:

sudo vim /etc/ssh/sshd_config

需要修改或确认以下参数:

# 禁用密码认证
PasswordAuthentication no
# 禁用空密码(即使密码认证已禁用,也建议关闭)
PermitEmptyPasswords no
# 仅允许密钥认证(可选但推荐)
PubkeyAuthentication yes
# 禁用挑战应答认证(避免通过其他方式输入密码)
ChallengeResponseAuthentication no
# 禁用GSSAPI认证(非必要场景)
GSSAPIAuthentication no
# 确保允许root通过密钥登录(若需要)
PermitRootLogin prohibit-password  # 或改为 'without-password'
# 限制登录用户(可选)
AllowUsers your_username

重启SSH服务

sudo systemctl restart sshd

注意:重启前建议开启第二个SSH会话,以防当前连接断开后无法重连。


密钥认证替代方案:从生成到部署

步骤1:生成密钥对(客户端执行)

推荐使用更安全的Ed25519算法:

ssh-keygen -t ed25519 -C "your_email@example.com"

若需兼容旧系统,可使用RSA(4096位):

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

步骤2:复制公钥到服务器

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server-ip

或手动追加:

cat ~/.ssh/id_ed25519.pub | ssh user@your-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

步骤3:设置密钥权限(重要)

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

常见问题与问答

Q1:禁用密码后,我还能通过控制台(如云服务商VNC)登录吗?

:可以。sshd_config只影响SSH服务,物理机控制台或云厂商的“远程连接”(如阿里云管理终端、腾讯云VNC)仍支持密码认证,作为紧急备用。

Q2:如果误操作导致无法登录,如何恢复?

:通过云控制台或带外管理(如IPMI)进入系统,恢复到备份文件:

sudo cp /etc/ssh/sshd_config.bak.20250101 /etc/ssh/sshd_config
sudo systemctl restart sshd

Q3:是否必须同时禁用所有密码认证相关选项?

:建议同时禁用PasswordAuthenticationChallengeResponseAuthentication,后者常被用于PAM模块的密码验证,若只禁前者,攻击者可能通过挑战-响应机制绕过。

Q4:能否对特定用户启用密码登录?

:可以,使用Match User块:

Match User insecure_user
    PasswordAuthentication yes

但该做法会降低整体安全性,仅建议用于临时调试。


最终验证与安全建议

完整测试流程

# 测试密钥登录(成功)
ssh -i ~/.ssh/id_ed25519 user@server
# 测试密码登录(应被拒绝)
ssh -o PreferredAuthentications=password user@server
# 输出:Permission denied (publickey).

附加安全措施

  • 更改SSH默认端口(非22):减少扫描攻击。
  • 启用Fail2ban:自动封禁多次失败尝试的IP。
  • 关闭公网SSH端口:若仅需内网管理,通过VPN或堡垒机访问。
  • 定期轮换密钥:至少每6个月生成新密钥。

日志监控

查看攻击记录:

sudo journalctl -u sshd | grep 'Failed password'

若发现大量失败尝试,说明你的服务器正被扫描,此时禁用密码登录已刻不容缓。


通过以上步骤,你的SSH服务将彻底摆脱密码认证漏洞。密钥是钥匙,密码是弱点——将服务器从“被动防御”转向“主动免疫”,是所有运维人员的第一步安全必修课。

抱歉,评论功能暂时关闭!