在日常的服务器管理和开发工作中,我们每天可能需要无数次地登录远程服务器。传统的密码登录方式不仅繁琐——需要我们记住并输入复杂的密码,更重要的是,它将我们的服务器暴露在被暴力破解的风险之下。
有没有一种方法,既能让我们安全地连接服务器,又能免去重复输入密码的烦恼呢?
答案是肯定的。那就是使用 SSH 密钥对进行身份验证。这篇博客将带你一步步配置 SSH 密钥登录,让你的服务器连接既安全又高效。
在开始操作之前,我们先花一分钟理解一下核心概念。SSH 密钥认证基于一种名为“非对称加密”的技术,它会生成一对密钥:
登录过程就像这样:你尝试连接服务器时,服务器会用你之前安装的“锁”(公钥)向你发出一个挑战,只有你本地电脑上持有配对的“钥匙”(私钥)才能正确回应这个挑战,从而证明你的身份,服务器便会允许你登录。
(一个简单的锁和钥匙比喻)
首先,我们需要在自己的电脑上(客户端)生成这对“锁和钥匙”。
打开你的终端(无论是 Windows 的 WSL/Git Bash,还是 macOS/Linux 的 Terminal),输入以下命令:
ssh-keygen -t ed25519 -C "your_email@example.com"命令解析:
-t ed25519: 指定使用ed25519算法。这是目前最推荐的算法,比传统的RSA更安全、性能更好。如果你的系统非常老旧,可以换成-t rsa -b 4096。-C "your_email@example.com": 添加一个注释,通常是你的邮箱,方便你识别这个密钥的用途。
执行后,系统会向你提问:
> Enter file in which to save the key (/Users/yourname/.ssh/id_ed25519):直接按回车,将其保存在默认位置即可。
> Enter passphrase (empty for no passphrase):强烈建议在这里设置一个密码 (passphrase)!这个密码是用来加密你的私钥文件的。即使某天你的电脑文件被盗,没有这个密码,黑客也无法使用你的私钥。
输入密码并确认后,你的密钥对就生成完毕了!它们位于 ~/.ssh/ 目录下:
id_ed25519: 你的私钥(钥匙),请妥善保管。id_ed25519.pub: 你的公钥(锁),准备把它安装到服务器上。现在,我们需要把公钥上传到目标服务器。这里介绍两种方法。
ssh-copy-id (强烈推荐)这是最简单、最不容易出错的方法。它会自动完成所有配置。
假设你的服务器用户名是 root,IP 地址是 123.45.67.89,执行:
ssh-copy-id root@123.45.67.89系统会要求你输入一次服务器的登录密码。输入正确后,你的公钥就被自动添加到了服务器的信任列表 ~/.ssh/authorized_keys 中,并且权限也设置妥当了。
如果你的本地电脑没有 ssh-copy-id 工具,也可以手动操作。
在本地电脑,显示并复制你的公钥内容:
cat ~/.ssh/id_ed25519.pub复制终端输出的那一长串 ssh-ed25519 ... 字符。
用密码登录服务器:
ssh root@123.45.67.89在服务器上,将公钥追加到 authorized_keys 文件中:
# 确保 .ssh 目录存在
mkdir -p ~/.ssh
# 将你的公钥粘贴到这里,并追加到文件中
echo "在这里粘贴你复制的公钥内容" >> ~/.ssh/authorized_keys
# 修复文件权限(至关重要!)
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys注意:权限设置错误是导致密钥登录失败最常见的原因。SSH 要求 .ssh 目录和 authorized_keys 文件有严格的权限。
现在,退出服务器,然后尝试重新登录:
ssh root@123.45.67.89如果一切顺利,系统将不再询问服务器的密码,而是提示你输入私钥的密码(就是你在第一步设置的 passphrase)。输入正确后,你就成功登录了!
为了让服务器彻底免疫密码暴力破解,当你确认密钥登录工作正常后,就应该禁用传统的密码登录方式。
登录到你的服务器。
编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config找到并修改以下几项,确保它们的值如下(如果行首有 #,请删除):
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no保存文件,然后重启 SSH 服务使配置生效:
sudo systemctl restart sshd⚠️ 安全警告: 在执行此操作并断开连接之前,请务必打开一个新的终端窗口,再次测试你的 SSH 密钥登录是否正常。如果配置有误,禁用密码登录可能会导致你被锁在服务器之外!
如果你需要管理多个服务器(比如公司的、私人的)或多个 Git 账户,你可能会有多个密钥对。
生成特定密钥:使用 ssh-keygen -f ~/.ssh/work_key 来生成名为 work_key 的新密钥。
上传特定公钥:使用 -i 参数指定要上传的公钥:
ssh-copy-id -i ~/.ssh/work_key.pub user@work-server.com使用特定私钥登录:同样使用 -i 参数:
ssh -i ~/.ssh/work_key user@work-server.com恭喜你!你已经成功地为你的服务器配置了 SSH 密钥登录。回顾一下,我们完成了:
这是一项一劳永逸的投资。从现在开始,享受更安全、更便捷的服务器管理体验吧!
文章作者: Alan Zeng
最后更新: 2025年09月29日 11:24:41
原始链接: https://alanzeng.com/blogs/27044/
版权说明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 4.0许可协议 。获得许可后,要求转载时注明文章出处和网站链接,谢谢!