问题描述
许多用户在管理 Linux 服务器时,默认使用密码进行 SSH 登录。然而,密码认证存在被暴力破解的风险,尤其是在服务器暴露于公网的情况下。为了提高服务器的安全性,建议使用 SSH 密钥认证(SSH Key Authentication)替代或配合密码认证使用。
本文将指导您在 Linux 服务器上生成 SSH 密钥对、配置公钥认证,并禁用密码登录,从而大幅提升远程访问的安全性。
解决方案步骤
步骤一:在本地计算机生成 SSH 密钥对
在您的本地终端(Linux、macOS 或 Windows 的 WSL/Git Bash)中执行以下命令:
- 运行密钥生成命令:
ssh-keygen -t ed25519 -C "[email protected]"如果您的系统不支持 Ed25519,可以使用 RSA 算法替代:
ssh-keygen -t rsa -b 4096 -C "[email protected]" - 按 Enter 键接受默认的密钥保存路径(通常为
~/.ssh/id_ed25519或~/.ssh/id_rsa)。 - 系统会提示您设置密钥密码短语(Passphrase),建议设置一个强密码短语以增加额外安全层。如果不想设置,可直接按 Enter 跳过。
生成完成后,您将在指定目录下看到两个文件:
id_ed25519(或id_rsa)— 私钥文件,切勿泄露给任何人。id_ed25519.pub(或id_rsa.pub)— 公钥文件,需要部署到服务器上。
步骤二:将公钥上传到服务器
使用以下命令将公钥复制到目标服务器:
- 使用
ssh-copy-id命令(推荐方式):ssh-copy-id username@your_server_ip输入服务器密码后,公钥将自动添加到服务器的
~/.ssh/authorized_keys文件中。 - 如果
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
如果设置了密码短语,系统会提示您输入密码短语(而非服务器密码)。成功登录后,说明密钥认证已正确配置。
步骤四:禁用密码登录(可选但强烈推荐)
确认密钥登录正常后,可以禁用密码认证以彻底消除暴力破解风险:
- 登录服务器并编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config - 找到或添加以下配置项,确保设置为:
PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no - 保存文件并重启 SSH 服务:
sudo systemctl restart sshd - 重要:在关闭当前终端之前,请先打开一个新的终端窗口测试密钥登录是否正常,以防止因配置错误导致无法访问服务器。
附加提示
- 定期轮换密钥:建议每隔 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即可快速连接。