配置 SSH Key 实现无密码登录和安全加固

配置 SSH Key 实现无密码登录和对 SSH 进行安全加固,是保障 Linux 服务器安全的重要步骤。以下是详细指南,涵盖生成 SSH Key、配置无密码登录以及 SSH 安全加固的完整流程。


1. 配置 SSH Key 实现无密码登录

1.1 什么是 SSH Key?

SSH Key 是一种基于非对称加密的身份验证方式,包含两个部分:

  • 私钥:保存在客户端,不能泄露。
  • 公钥:上传到服务器,用于验证身份。

与传统密码登录相比,SSH Key 更加安全,且支持无密码登录。


1.2 生成 SSH Key

在客户端(本地电脑)生成密钥对。

  1. 生成密钥对

    bash
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    • -t rsa:指定加密算法(RSA 是常用算法)。
    • -b 4096:指定密钥长度,推荐 4096 位。
    • -C:备注信息(通常是邮箱地址)。
  2. 生成过程
    系统会提示存储密钥的位置,默认路径为 ~/.ssh/id_rsa

     
    Enter file in which to save the key (/home/username/.ssh/id_rsa):
    • 按回车使用默认路径,或指定自定义路径。
    • 设置或跳过密码短语(建议设置密码短语以增加安全性)。

    成功后会生成两份文件:

    • 私钥~/.ssh/id_rsa
    • 公钥~/.ssh/id_rsa.pub

1.3 上传公钥到服务器

将公钥上传到目标服务器。

  1. 使用 ssh-copy-id 一键上传

    bash
    ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
    • username:服务器登录用户名。
    • server_ip:服务器 IP 地址。

    成功后,公钥会被添加到服务器用户的 ~/.ssh/authorized_keys 文件中。

  2. 手动上传公钥(如果 ssh-copy-id 不可用):

    • 查看公钥内容:
      bash
      cat ~/.ssh/id_rsa.pub
    • 登录服务器并将公钥追加到 authorized_keys 文件:
      bash
      echo "公钥内容" >> ~/.ssh/authorized_keys
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys

1.4 测试无密码登录

在客户端测试无密码登录:

bash
ssh username@server_ip
  • 如果配置正确,将无需输入密码即可登录。
  • 如果为私钥设置了密码短语,需输入该短语解锁私钥。

2. SSH 安全加固

完成无密码登录后,可以进一步优化 SSH 的安全性,防止暴力破解和未授权访问。


2.1 禁用密码登录

  1. 编辑服务器上的 SSH 配置文件:

    bash
    sudo nano /etc/ssh/sshd_config
  2. 修改以下配置:

    ini
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no
    • PasswordAuthentication no:禁用密码登录。
    • UsePAM no:禁用基于 PAM 的身份验证。
  3. 重启 SSH 服务:

    bash
    sudo systemctl restart sshd

2.2 更改默认 SSH 端口

默认的 SSH 端口是 22,更改端口可以降低暴力破解的风险。

  1. 编辑 SSH 配置文件:
    bash
    sudo nano /etc/ssh/sshd_config
  2. 修改端口号(例如改为 2222):
    ini
    Port 2222
  3. 重启 SSH 服务:
    bash
    sudo systemctl restart sshd
  4. 登录时指定新端口:
    bash
    ssh -p 2222 username@server_ip

2.3 限制允许登录的用户

  1. 编辑 SSH 配置文件:

    bash
    sudo nano /etc/ssh/sshd_config
  2. 添加以下内容,仅允许特定用户通过 SSH 登录:

    ini
    AllowUsers username1 username2
    • username1username2 是被允许的用户名。
  3. 重启 SSH 服务:

    bash
    sudo systemctl restart sshd

2.4 禁用 Root 用户登录

直接使用 root 用户登录存在较高风险,建议禁止。

  1. 编辑 SSH 配置文件:
    bash
    sudo nano /etc/ssh/sshd_config
  2. 找到并修改以下配置:
    ini
    PermitRootLogin no
  3. 重启 SSH 服务:
    bash
    sudo systemctl restart sshd

2.5 启用防火墙并限制 SSH 访问

  1. 使用 UFW 配置防火墙:

    • 开放新的 SSH 端口(如 2222):
      bash
      sudo ufw allow 2222/tcp
      sudo ufw enable
  2. 仅允许特定 IP 地址访问:

    bash
    sudo ufw allow from <trusted_ip> to any port 2222

2.6 启用 Fail2Ban 防护

Fail2Ban 是一个防止暴力破解的工具,可自动封禁多次失败的登录尝试。

  1. 安装 Fail2Ban:
    bash
    sudo apt install fail2ban
  2. 配置 SSH 保护规则:
    • 编辑 /etc/fail2ban/jail.local
      ini
      [sshd]
      enabled = true
      port = 2222
      maxretry = 5
      bantime = 3600
  3. 重启 Fail2Ban 服务:
    bash
    sudo systemctl restart fail2ban

2.7 使用 SSH 配置文件简化登录

在客户端上配置 SSH 登录参数,避免重复输入。

  1. 编辑本地 SSH 配置文件:
    bash
    nano ~/.ssh/config
  2. 添加以下内容:
    ini
    Host myserver
        HostName server_ip
        User username
        Port 2222
        IdentityFile ~/.ssh/id_rsa
  3. 使用别名登录:
    bash
    ssh myserver

3. 密钥管理与安全审计

3.1 私钥的安全存储

  • 私钥应存储在本地,严禁将私钥上传到服务器。
  • 使用密码短语加密私钥,防止私钥泄露后被滥用。

3.2 定期更换 SSH 密钥

  • 定期删除旧的公钥,生成并上传新的密钥。
  • 在服务器上清理无用的公钥:
    bash
    nano ~/.ssh/authorized_keys

3.3 监控 SSH 登录

  1. 查看最近的登录记录:

    bash
    last
  2. 检查失败的登录尝试:

    bash
    sudo grep "Failed password" /var/log/auth.log
  3. 配置登录告警(可选):

    • ~/.bashrc 中添加:
      bash
      echo "SSH login: $(date) from $(who | awk '{print $5}')" | mail -s "SSH Login Alert" your_email@example.com

4. 总结

配置 SSH Key 和安全加固的步骤可以分为以下几部分:

  1. 实现无密码登录
    • 生成公私钥对并上传公钥至服务器。
    • 测试无密码登录是否成功。
  2. SSH 安全加固
    • 禁用密码登录。
    • 更改默认端口。
    • 限制登录用户,禁止 root 登录。
    • 启用防火墙和 Fail2Ban 防护。
  3. 密钥管理与审计
    • 确保私钥安全,定期更换密钥。
    • 监控登录行为,发现异常及时处理。

通过以上配置,可以显著提高服务器的安全性,防止未经授权的访问。

 

posted @ 2025-07-18 16:14  网硕互联  阅读(135)  评论(0)    收藏  举报