主页
文章
分类
标签
关于
ssh免密登录ubuntu
发布于: 2025-6-4   更新于: 2025-6-4   收录于: ubuntu
文章字数: 1205   阅读时间: 3 分钟   阅读量:

实验环境

  • 客户机:win11
  • 服务器:ubuntu20.04 server

公钥和密钥

要想实现ubuntu的免密登录,要用到公钥和密钥。公钥和密钥(私钥)是成对出现的加密认证工具:

  • 公钥:用于加密/验证,可以公开,复制到任何设备上,相当于锁的一部分
  • 密钥:用于解密/签名,严格保密,只保存在自己这,相当于身份凭证,也可以理解为唯一的钥匙

ssh的免密登录就是利用公密钥来实现的,公钥放入公共服务器,密钥放在自己这,就可以实现免密登录。

具体步骤

本地生成密钥对

win下打开命令行,输入指令生成密钥对,

1
ssh-keygen -t rsa # -t 表示用于什么算法去生成密钥对,后面会简要介绍其他的算法
  • 它会先问你密钥对存储的位置,默认情况下会存在你当前用户下的.ssh文件夹下,我们直接回车确认。
  • 接下来它会让你定义密钥对的密码,由于我们是免密登录,我们直接回车确认,无密码即可。
  • 最后会让你确认密码,我们直接回车确认。

alt text

这样我们的密钥对就生成好了,我们可以在显示的路径下找到我们的密钥对:

  • id_rsa: 为密钥,要保存好
  • id_rsa.pub: 为公钥,可分发给服务器

服务器确认开启密钥登录

首先要确保服务器上的ssh已经安装,ubuntu下安装命令为:

1
sudo apt update && sudo apt install openssh-server

启动并设置为开机自启:

1
sudo systemctl start ssh && sudo systemctl enable ssh

然后确保ssh开启密钥登录,编辑ssh配置文件:

1
sudo vim /etc/ssh/sshd_config

alt text

我们找到 PubkeyAuthentication yes,去掉前面的注释符,默认应该是有注释符的。

保存后重启ssh服务:

1
sudo systemctl restart ssh

这样我们就开启了ssh的密钥登陆

上传公钥至服务器

上传的方法有很多,这里讲最简单暴力的:

  • 复制id_rsa.pub的内容(想要显示全部内容,win下可以用cat id_rsa.pub来显示,没有cat可能不行)。
  • 编辑服务器下的~/.ssh/authorized_keys文件,将公钥内容添加到里面。(如果没有就创建一个)
    1
    
    vim ~/.ssh/authorized_keys
    
    这个文件可以收录所有的公钥(一行一个公钥,无需额外格式),这样其他的客户机想要免密登录也如此配置。
  • 配置完成之后,调整权限:
    1
    
    chmod 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(指定长度)