如何在 Linux 服务器上配置 SSH 密钥认证以增强安全性

SSH, 密钥认证, Linux, 安全, 服务器管理, 密码登录, 公钥, 私钥 0 この回答はお役に立ちましたか?

问题描述

许多用户在管理 Linux 服务器时,默认使用密码进行 SSH 登录。然而,密码认证存在被暴力破解的风险,尤其是在服务器暴露于公网的情况下。为了提高服务器的安全性,建议使用 SSH 密钥认证(SSH Key Authentication)替代或配合密码认证使用。

本文将指导您在 Linux 服务器上生成 SSH 密钥对、配置公钥认证,并禁用密码登录,从而大幅提升远程访问的安全性。

解决方案步骤

步骤一:在本地计算机生成 SSH 密钥对

在您的本地终端(Linux、macOS 或 Windows 的 WSL/Git Bash)中执行以下命令:

  1. 运行密钥生成命令:
    ssh-keygen -t ed25519 -C "[email protected]"

    如果您的系统不支持 Ed25519,可以使用 RSA 算法替代:

    ssh-keygen -t rsa -b 4096 -C "[email protected]"
  2. Enter 键接受默认的密钥保存路径(通常为 ~/.ssh/id_ed25519~/.ssh/id_rsa)。
  3. 系统会提示您设置密钥密码短语(Passphrase),建议设置一个强密码短语以增加额外安全层。如果不想设置,可直接按 Enter 跳过。

生成完成后,您将在指定目录下看到两个文件:

  • id_ed25519(或 id_rsa)— 私钥文件,切勿泄露给任何人
  • id_ed25519.pub(或 id_rsa.pub)— 公钥文件,需要部署到服务器上。

步骤二:将公钥上传到服务器

使用以下命令将公钥复制到目标服务器:

  1. 使用 ssh-copy-id 命令(推荐方式):
    ssh-copy-id username@your_server_ip

    输入服务器密码后,公钥将自动添加到服务器的 ~/.ssh/authorized_keys 文件中。

  2. 如果 ssh-copy-id 不可用,可手动操作:
    cat ~/.ssh/id_ed25519.pub | ssh username@your_server_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

步骤三:测试密钥登录

在本地终端中尝试使用密钥登录服务器:

ssh username@your_server_ip

如果设置了密码短语,系统会提示您输入密码短语(而非服务器密码)。成功登录后,说明密钥认证已正确配置。

步骤四:禁用密码登录(可选但强烈推荐)

确认密钥登录正常后,可以禁用密码认证以彻底消除暴力破解风险:

  1. 登录服务器并编辑 SSH 配置文件:
    sudo nano /etc/ssh/sshd_config
  2. 找到或添加以下配置项,确保设置为:
    PasswordAuthentication no
    PubkeyAuthentication yes
    ChallengeResponseAuthentication no
  3. 保存文件并重启 SSH 服务:
    sudo systemctl restart sshd
  4. 重要:在关闭当前终端之前,请先打开一个新的终端窗口测试密钥登录是否正常,以防止因配置错误导致无法访问服务器。

附加提示

  • 定期轮换密钥:建议每隔 6-12 个月更换一次 SSH 密钥对,以降低密钥泄露的风险。
  • 保护私钥安全:私钥文件的权限应设置为 600(仅所有者可读写),目录 ~/.ssh 权限应为 700
  • 使用 SSH Agent:如果您不想每次都输入密码短语,可以使用 ssh-agent 来缓存私钥:
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_ed25519
  • 配置 Fail2Ban:即使禁用了密码登录,仍建议安装 fail2ban 来自动封禁可疑的连接尝试。
  • 备份密钥:将私钥文件安全地备份到加密存储设备中,以防本地文件丢失后无法登录服务器。
  • 多服务器管理:如果您管理多台服务器,可以使用 SSH 配置文件(~/.ssh/config)来简化连接:
    Host myserver
        HostName your_server_ip
        User username
        IdentityFile ~/.ssh/id_ed25519

    配置后,只需输入 ssh myserver 即可快速连接。

この回答はお役に立ちましたか?

チケット送信

サポートが必要な場合はチケットを送信してください。サポートチームが対応します。

チケット送信