实验环境
- 客户机:win11
- 服务器:ubuntu20.04 server
公钥和密钥
要想实现ubuntu的免密登录,要用到公钥和密钥。公钥和密钥(私钥)是成对出现的加密认证工具:
- 公钥:用于加密/验证,可以公开,复制到任何设备上,相当于锁的一部分
- 密钥:用于解密/签名,严格保密,只保存在自己这,相当于身份凭证,也可以理解为唯一的钥匙
ssh的免密登录就是利用公密钥来实现的,公钥放入公共服务器,密钥放在自己这,就可以实现免密登录。
具体步骤
本地生成密钥对
win下打开命令行,输入指令生成密钥对,
|
|
- 它会先问你密钥对存储的位置,默认情况下会存在你当前用户下的.ssh文件夹下,我们直接回车确认。
- 接下来它会让你定义密钥对的密码,由于我们是免密登录,我们直接回车确认,无密码即可。
- 最后会让你确认密码,我们直接回车确认。

这样我们的密钥对就生成好了,我们可以在显示的路径下找到我们的密钥对:
- id_rsa: 为密钥,要保存好
- id_rsa.pub: 为公钥,可分发给服务器
服务器确认开启密钥登录
首先要确保服务器上的ssh已经安装,ubuntu下安装命令为:
|
|
启动并设置为开机自启:
|
|
然后确保ssh开启密钥登录,编辑ssh配置文件:
|
|

我们找到 PubkeyAuthentication yes,去掉前面的注释符,默认应该是有注释符的。
保存后重启ssh服务:
|
|
这样我们就开启了ssh的密钥登陆
上传公钥至服务器
上传的方法有很多,这里讲最简单暴力的:
- 复制id_rsa.pub的内容(想要显示全部内容,win下可以用
cat id_rsa.pub来显示,没有cat可能不行)。 - 编辑服务器下的
~/.ssh/authorized_keys文件,将公钥内容添加到里面。(如果没有就创建一个)这个文件可以收录所有的公钥(一行一个公钥,无需额外格式),这样其他的客户机想要免密登录也如此配置。1vim ~/.ssh/authorized_keys - 配置完成之后,调整权限:
1chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys - 最后测试免密登录,直接ssh对应服务器下的账号
其他
常见的 SSH 密钥类型
SSH 支持多种密钥算法,核心差异在安全性、兼容性、生成速度,日常用得最多的是 RSA 和 Ed25519,具体如下:
| 密钥类型 | 算法原理 | 核心特点 | 适用场景 | 生成命令 |
|---|---|---|---|---|
| RSA | 大整数分解难题 | 兼容性最强(支持所有 SSH 版本),安全性依赖密钥长度(默认 2048 位,推荐 4096 位) | 通用场景(Windows/Ubuntu/老设备) | ssh-keygen -t rsa -b 4096 |
| Ed25519 | 椭圆曲线数字签名算法 | 安全性更高(同等安全级下密钥更短)、生成/验证速度快、抗攻击能力强 | 现代设备(SSH 6.5+ 支持) | ssh-keygen -t ed25519 |
| ECDSA | 椭圆曲线数字签名算法 | 介于 RSA 和 Ed25519 之间,安全性依赖曲线选择(推荐 NIST P-256/P-384) | 对速度/密钥长度有要求的场景 | ssh-keygen -t ecdsa -b 256 |
| DSA | 数字签名算法 | 安全性较弱(已被 SSH 官方不推荐),密钥长度固定 1024 位(易被破解) | 几乎不推荐使用(仅兼容老系统) | 不建议使用 |
- 无需纠结复杂原理,记住“选 Ed25519 优先,老设备用 RSA”即可。 -t(指定算法)、-b(指定长度)