保姆级教程:Ubuntu 服务器 SSH 密钥登录配置全流程(Windows/Linux/macOS 通用)
作为一名开发者或运维人员,服务器登录的安全性和便捷性缺一不可。传统密码登录不仅容易遗忘,还存在被暴力破解的风险,而 SSH 密钥登录既能实现免密快速访问,又能通过非对称加密保障安全,堪称服务器管理的 “最优解”。
今天就带大家从零开始,一步步完成 Ubuntu 服务器的 SSH 安装、密钥配置与启用,无论你用的是 Windows、Linux 还是 macOS 客户端,都能轻松跟着操作~
一、服务器端:搭建 SSH 服务基础环境
首先得让服务器具备 SSH 服务能力,这是后续配置的前提,操作超简单!
1. 安装 OpenSSH 服务端
先通过服务器控制台、VNC 或其他方式登录到 Ubuntu 系统(新服务器一般可直接通过厂商控制台登录),打开终端执行以下命令:
bash
# 先更新软件包列表,避免安装时出现版本兼容问题
sudo apt update
# 安装 OpenSSH 服务端,一键搞定基础配置
sudo apt install -y openssh-server
2. 启动服务并设置开机自启
安装完成后,需要手动启动服务,还得让它开机自动运行,避免重启服务器后还要重新启动:
bash
# 启动 SSH 服务
sudo systemctl start ssh
# 设置开机自启,一劳永逸
sudo systemctl enable ssh
# 验证服务状态,看到 active (running) 就说明成功啦
sudo systemctl status ssh
如果输出结果中显示绿色的 “active (running)”,恭喜你,SSH 服务已经在服务器上正常运行了!
二、服务器端:开启密钥登录权限
默认情况下,SSH 可能优先允许密码登录,我们需要修改配置文件,让服务器 “认识” 并允许密钥登录。
1. 编辑 SSH 核心配置文件
执行以下命令打开配置文件(需要管理员权限):
bash
sudo nano /etc/ssh/sshd_config
2. 关键配置项调整(重点!)
在打开的文件中,找到以下几项配置,取消前面的注释(删掉开头的 #)并修改为对应值,没有的话直接添加:
bash
# 允许公钥认证,这是密钥登录的核心开关,必须设为 yes
PubkeyAuthentication yes
# 指定公钥文件存放路径,默认值即可,不用改
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
# 可选:暂时先保留密码登录,等密钥配置成功再关闭(避免配置失败登不上服务器)
# PasswordAuthentication no
# 可选:禁止 root 账号直接登录,提升服务器安全性(推荐开启)
PermitRootLogin no
3. 保存配置并重启服务
修改完成后,按 Ctrl+X 退出编辑,输入 Y 确认保存,再按回车确认文件路径。最后重启 SSH 服务,让配置生效:
bash
sudo systemctl restart ssh
到这里,服务器端的准备工作就全部完成了,接下来轮到客户端生成密钥并上传到服务器。
三、客户端:生成 SSH 密钥对(非对称加密的核心)
SSH 密钥登录依赖 “公钥 + 私钥” 的非对称加密机制:公钥可以放心上传到服务器,私钥保存在自己的电脑上,就像一把 “专属钥匙”,只有你的电脑能通过私钥匹配服务器上的公钥登录。
根据客户端系统不同,生成密钥的方法略有差异,但都很简单:
1. Linux/macOS 客户端
直接打开系统自带的终端,执行以下命令:
bash
# 生成 RSA 类型密钥对,一路回车默认配置即可,无需设置额外密码
ssh-keygen -t rsa
生成成功后,密钥会默认存放在 ~/.ssh/ 目录下:
id_rsa:私钥,相当于你的 “专属钥匙”,绝对不能泄露给别人!id_rsa.pub:公钥,相当于 “锁”,后续要上传到服务器的就是它。
2. Windows 客户端(PowerShell/cmd)
Windows 10 及以上系统自带 SSH 工具,直接打开 PowerShell 或 cmd,执行同样的命令:
bash
# 生成 RSA 密钥对,同样一路回车默认配置
ssh-keygen -t rsa
密钥默认存放在 C:Users你的用户名.ssh 目录下,同样包含 id_rsa(私钥)和 id_rsa.pub(公钥)两个文件,记得找到这个目录并妥善保管。
四、客户端:将公钥上传到服务器(让服务器认识你的 “锁”)
生成密钥对后,需要把公钥上传到服务器,这样服务器才能识别你的客户端。这里提供两种方法,按需选择:
方法 1:ssh-copy-id 一键上传(推荐,简单高效)
如果你的客户端是 Linux/macOS,或者 Windows 已经安装了 OpenSSH 客户端,直接在终端执行:
bash
# 替换为你的服务器用户名和 IP(比如 admin@8.130.133.203)
ssh-copy-id 用户名@服务器IP
执行后会提示输入服务器用户的密码,输入正确后,公钥会自动上传并添加到服务器的 ~/.ssh/authorized_keys 文件中,全程无需手动操作。
方法 2:手动复制公钥(所有系统通用,不怕出问题)
如果方法 1 不生效,用手动方式更稳妥:
-
复制公钥内容:
- Linux/macOS:在终端执行
cat ~/.ssh/id_rsa.pub,复制输出的一整行字符串(以ssh-rsa开头)。 - Windows:找到
C:Users你的用户名.sshid_rsa.pub文件,用记事本打开,复制里面的全部内容。
- Linux/macOS:在终端执行
-
登录服务器并添加公钥:先用密码登录服务器:
bash
ssh 用户名@服务器IP登录后,在服务器终端执行以下命令,把复制的公钥内容粘贴进去:
bash
# 创建 .ssh 目录(如果没有的话),并设置权限(避免权限过高导致登录失败) mkdir -p ~/.ssh && chmod 700 ~/.ssh # 把公钥内容追加到 authorized_keys 文件(粘贴你复制的公钥内容,替换引号里的文字) echo "你的公钥内容" >> ~/.ssh/authorized_keys # 设置文件权限为 600(必须!权限不对会导致密钥登录失败) chmod 600 ~/.ssh/authorized_keys
五、验证密钥登录:免密访问成功!
配置到这里,就可以测试是否能免密登录了:
- 先退出当前服务器连接:执行
exit命令。 - 重新尝试登录:
bash
ssh 用户名@服务器IP
如果不需要输入密码,直接进入服务器终端,说明密钥登录配置成功!以后登录服务器,再也不用记复杂的密码了~
六、可选:增强安全性(密钥登录成功后必做)
为了让服务器更安全,建议在确认密钥登录正常后,关闭密码登录功能,彻底杜绝暴力破解风险:
- 再次编辑 SSH 配置文件:
bash
sudo nano /etc/ssh/sshd_config - 找到
PasswordAuthentication项,修改为:bash
PasswordAuthentication no - 重启 SSH 服务使配置生效:
bash
sudo systemctl restart ssh
另外,一定要备份好客户端的私钥(id_rsa 文件),可以复制到 U 盘或云盘的安全位置。如果私钥丢失,就无法通过密钥登录服务器了,只能通过服务器厂商的控制台重置登录方式。
SSH 密钥登录的配置流程看似步骤多,但核心就三步:服务器安装 SSH 服务、客户端生成密钥对、公钥上传服务器并配置权限。整个过程难度不大,按照教程一步步操作,10 分钟就能搞定。
配置完成后,既能享受免密登录的便捷,又能获得比密码登录更高的安全性,不管是日常运维还是开发调试,都能大幅提升效率。如果配置过程中遇到问题,可以检查一下文件权限是否正确,或者公钥内容是否完整,大部分问题都能轻松解决~






