尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Linux系统基础10:SSH 密钥认证配置

Linux系统基础10:SSH 密钥认证配置
📅 发布时间:2026/7/13 8:30:05

Linux SSH 密钥认证配置 新手超详细教程

目录

Linux SSH 密钥认证配置 新手超详细教程

一、先搞懂:密钥认证是什么?为什么比密码好?

1. 核心原理:一对钥匙,一把锁一把钥匙

2. 对比密码登录的优势

3. 准备工作

二、步骤 1:在本地客户端生成密钥对

推荐算法:ed25519

执行生成命令

命令逐成分拆解

交互过程详解(新手一路回车即可)

第 1 步:选择密钥保存路径

第 2 步:设置私钥密码短语(可选)

第 3 步:确认密码短语

生成完成的结果

三、步骤 2:把公钥上传到远程服务器

方法一:ssh-copy-id 一键上传(推荐,最简单)

命令格式

真实举例(对应 OK62xx 开发板场景)

命令逐成分拆解

执行过程

方法二:手动上传公钥(ssh-copy-id 不可用时用)

步骤 1:先查看并复制你的公钥内容

步骤 2:密码登录远程服务器

步骤 3:在远程服务器创建 .ssh 目录(如果没有)

步骤 4:把公钥写入 authorized_keys 文件

步骤 5:设置正确的权限(非常重要!)

四、步骤 3:验证免密登录是否成功

五、步骤 4:安全加固:禁用密码登录(可选但强烈推荐)

操作步骤

六、Windows 原生 PowerShell 配置方法

1. 生成密钥

2. 上传公钥

3. 验证登录

七、新手高频踩坑排查

1. 配置完还是要输密码?90% 是权限问题

检查服务端权限(远程服务器上执行)

检查客户端权限(本地上执行)

2. 报错 Permission denied (publickey)

3. Windows 提示私钥权限不安全

4. 还是不行?开启调试模式看原因

八、补充实用知识


SSH 密钥认证是比密码登录更安全、更方便的远程登录方式,也是嵌入式开发、服务器运维的必备技能。它基于非对称加密实现,全程不需要传输密码,既能防暴力破解,又能实现免密登录,非常适合日常管理 OK62xx 开发板、云服务器等 Linux 设备。

我会从原理→生成密钥→上传公钥→验证登录→安全加固→踩坑排查一步步拆解,每个命令都逐成分说明,零基础也能跟着操作。


一、先搞懂:密钥认证是什么?为什么比密码好?

1. 核心原理:一对钥匙,一把锁一把钥匙

SSH 密钥认证会生成一对匹配的密钥:

  • 公钥(Public Key):相当于「锁」,可以公开,放到你要登录的远程服务器上。
  • 私钥(Private Key):相当于「钥匙」,必须你自己保管,绝对不能泄露,存在你的本地电脑上。

登录时的完整流程:

  1. 你发起登录请求,服务器用公钥加密一段随机数据,发给你。
  2. 你的本地电脑用私钥解密这段数据,再发回给服务器。
  3. 服务器验证解密结果正确,就确认你是合法用户,直接放行登录。

全程不会传输密码,就算网络被监听,也拿不到你的登录凭证,安全性远高于密码登录。

2. 对比密码登录的优势

  • ✅更安全:防暴力破解,没有密码可以被猜
  • ✅更方便:配置好后不用每次输密码,远程操作效率高
  • ✅适合自动化:脚本、程序自动登录服务器,不需要硬编码密码

3. 准备工作

  • 客户端:你的本地 Linux/WSL/Windows 终端(用来发起登录)
  • 服务端:远程 Linux 设备(OK62xx 开发板、云服务器等),已开启 SSH 服务
  • 你需要知道:远程设备的IP 地址、登录用户名、当前的登录密码
  • 确保网络连通:本地能 ping 通远程设备,能正常用密码 SSH 登录

二、步骤 1:在本地客户端生成密钥对

首先在你自己的电脑(客户端)上生成公钥 + 私钥,只需要生成一次,同一对密钥可以给多台服务器用。

推荐算法:ed25519

现在主流推荐用ed25519算法,比传统的 RSA 更安全、体积更小、速度更快;如果是非常老的嵌入式系统不支持 ed25519,再用 RSA。

执行生成命令

打开你的本地终端(WSL/Linux 终端 / Windows PowerShell 都可以),输入:

ssh-keygen -t ed25519
命令逐成分拆解
成分含义为什么这么用
ssh-keygen命令名,SSH 密钥生成工具专门用来生成 SSH 密钥对的官方工具
-t ed25519选项,指定密钥类型-t= type,指定用 ed25519 加密算法

交互过程详解(新手一路回车即可)

执行命令后,会有三步提示,新手直接按三次回车就行,下面解释每个提示是什么:

第 1 步:选择密钥保存路径
Generating public/private ed25519 key pair. Enter file in which to save the key (/home/你的用户名/.ssh/id_ed25519):
  • 默认保存在用户家目录的.ssh文件夹里:~/.ssh/id_ed25519
  • 新手直接回车,用默认路径就行,改了路径后面登录还要手动指定,容易忘。
第 2 步:设置私钥密码短语(可选)
Enter passphrase (empty for no passphrase):
  • 这是给私钥本身加一层密码保护:就算别人拿到了你的私钥文件,不知道这个短语也用不了。
  • 新手练习可以直接回车(不设置),日常使用更方便;生产环境强烈建议设置。
  • 注意:这个密码不是服务器的登录密码,是保护你本地私钥的。
第 3 步:确认密码短语
Enter same passphrase again:
  • 和上一步输入一样的内容,没设置就直接回车。

生成完成的结果

看到类似下面的输出,就代表生成成功了:

Your identification has been saved in /home/linuxlearn/.ssh/id_ed25519 Your public key has been saved in /home/linuxlearn/.ssh/id_ed25519.pub The key fingerprint is: SHA256:xxxxxxxxxx linuxlearn@your-pc

生成的两个文件非常重要:

  1. ~/.ssh/id_ed25519:私钥文件,绝对不能发给别人、不能上传到公开地方,相当于你的家门钥匙。
  2. ~/.ssh/id_ed25519.pub:公钥文件,可以随便分发,相当于锁,要放到远程服务器上。

补充:如果要用传统 RSA 算法(兼容老系统),命令是:

bash

运行

ssh-keygen -t rsa -b 4096

-b 4096表示密钥长度 4096 位,安全性更高。


三、步骤 2:把公钥上传到远程服务器

生成密钥后,要把「公钥」放到远程服务器的指定位置,服务器才能用它来验证你的身份。有两种方法,新手优先用第一种。

方法一:ssh-copy-id一键上传(推荐,最简单)

绝大多数 Linux 发行版(包括 Ubuntu、Debian、OK62xx 标准系统)都自带这个命令,一行命令自动完成所有配置,不会出错。

命令格式
ssh-copy-id 远程用户名@远程服务器IP
真实举例(对应 OK62xx 开发板场景)

假设你的开发板 IP 是192.168.1.100,登录用户是root:

ssh-copy-id root@192.168.1.100
命令逐成分拆解
成分含义
ssh-copy-id命令名,SSH 公钥复制工具
root@192.168.1.100目标服务器信息,格式是「用户名 @IP 地址」
执行过程
  1. 第一次连接会提示:Are you sure you want to continue connecting (yes/no/[fingerprint])?
    • 输入yes回车,确认信任这台服务器。
  2. 然后会提示输入远程服务器的登录密码(就是你平时密码登录的密码)。
  3. 输入密码回车后,工具会自动:
    • 在远程服务器上创建~/.ssh目录(如果不存在)
    • 把你的公钥追加到远程服务器的~/.ssh/authorized_keys文件里
    • 自动设置好正确的权限

看到Number of key(s) added: 1就代表上传成功了。


方法二:手动上传公钥(ssh-copy-id 不可用时用)

如果嵌入式设备精简系统没有ssh-copy-id命令(比如部分 BusyBox 系统),可以手动操作,原理和一键上传完全一样。

步骤 1:先查看并复制你的公钥内容

在本地终端执行,打印公钥内容:

cat ~/.ssh/id_ed25519.pub

输出是一长串字符,大概长这样:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBxxxxxxxxxxxxxx linuxlearn@your-pc
  • 用鼠标选中整行,右键复制,注意不要少字符、不要加换行。
步骤 2:密码登录远程服务器
ssh root@192.168.1.100

输入密码登录进去。

步骤 3:在远程服务器创建 .ssh 目录(如果没有)
mkdir -p ~/.ssh
  • 拆解:-p确保目录存在就不报错,不存在就创建。
步骤 4:把公钥写入 authorized_keys 文件
echo "你刚才复制的公钥整行内容" >> ~/.ssh/authorized_keys
  • 拆解:>>是追加写入,不会覆盖原有内容;如果已经有其他公钥,会加在后面。
  • 新手注意:公钥是一整行,不要拆成多行,引号里粘贴完整内容。
步骤 5:设置正确的权限(非常重要!)

SSH 有严格的安全机制,如果文件 / 目录权限太宽松,会直接拒绝密钥认证,这是新手最高频的踩坑点。

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
  • 逐行说明:
    • chmod 700 ~/.ssh:.ssh 目录只有所有者能读写进入,其他人完全没权限
    • chmod 600 ~/.ssh/authorized_keys:公钥文件只有所有者能读写,其他人完全没权限

四、步骤 3:验证免密登录是否成功

回到本地终端,直接执行 SSH 登录命令:

ssh root@192.168.1.100

✅ 成功标志: 不需要输入密码,直接就进入了远程服务器的终端,说明密钥认证配置成功了。

❌ 如果还是提示要输密码,说明配置有问题,直接翻到后面的「常见问题排查」部分。


五、步骤 4:安全加固:禁用密码登录(可选但强烈推荐)

确认密钥登录完全正常后,建议关闭密码登录,彻底杜绝暴力破解的风险。

⚠️ 重要警告:必须确保密钥登录能正常使用再操作!如果密钥有问题,关掉密码登录后你自己就登不上服务器了,只能通过串口 / 控制台恢复。

操作步骤

  1. 登录远程服务器,编辑 SSH 服务配置文件:

    sudo nano /etc/ssh/sshd_config

    嵌入式设备如果是 dropbear 服务,配置文件路径不同,一般不用额外改,默认就支持密钥;OpenSSH 才是这个路径。

  2. 找到下面几个配置项,修改成对应的值(前面有#注释的就去掉注释,没有就新增):

    # 禁用密码登录 PasswordAuthentication no # 禁止空密码登录 PermitEmptyPasswords no # 允许密钥认证(默认一般是yes,确认一下) PubkeyAuthentication yes
  3. 保存退出:按Ctrl + O回车保存,Ctrl + X退出 nano。

  4. 重启 SSH 服务,让配置生效:

    • Ubuntu/Debian 系统:
      sudo systemctl restart sshd
    • 嵌入式老系统 /init 系统:
      sudo service sshd restart
  5. 验证:新开一个终端窗口,尝试用密码登录,应该会直接报错,只能用密钥登录,就说明加固成功了。


六、Windows 原生 PowerShell 配置方法

如果你不用 WSL,直接用 Windows 自带的终端也能配置,Windows 10/11 已经自带 OpenSSH 客户端,不用额外装软件。

1. 生成密钥

打开 PowerShell,输入和 Linux 完全一样的命令:

ssh-keygen -t ed25519
  • 一路回车,默认保存在C:\Users\你的Windows用户名\.ssh\目录下
  • 同样生成id_ed25519(私钥)和id_ed25519.pub(公钥)两个文件

2. 上传公钥

Windows 没有ssh-copy-id命令,用手动方法:

  1. 查看公钥内容:
    type .ssh\id_ed25519.pub
  2. 复制整行内容,密码登录远程服务器,写入~/.ssh/authorized_keys,设置权限,和前面手动方法完全一致。

3. 验证登录

ssh root@192.168.1.100

免密进入就是成功了。


七、新手高频踩坑排查

1. 配置完还是要输密码?90% 是权限问题

这是最常见的问题,SSH 对密钥相关文件的权限要求非常严格,权限太松就会静默失效,回退到密码登录。

检查服务端权限(远程服务器上执行)
# 查看 .ssh 目录和文件的权限 ls -ld ~/.ssh ls -l ~/.ssh/authorized_keys

✅ 正确权限:

  • .ssh目录:必须是drwx------(700)
  • authorized_keys文件:必须是-rw-------(600)

❌ 如果权限不对,执行修复命令:

chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
检查客户端权限(本地上执行)

本地的私钥文件权限也不能太松,尤其是 Linux/WSL 环境:

chmod 600 ~/.ssh/id_ed25519

2. 报错Permission denied (publickey)

  1. 先检查上面的权限问题
  2. 确认公钥有没有写错:是不是完整的一行、有没有多复制空格、有没有少字符
  3. 确认用户名对不对:公钥是放到哪个用户的目录下,就只能用哪个用户登录
    • 比如你放到了 root 的目录下,就只能用 root 登录;用普通用户登录是没用的
  4. 确认服务器开启了密钥认证:检查sshd_config里PubkeyAuthentication yes

3. Windows 提示私钥权限不安全

Windows 下也会校验私钥权限,如果私钥文件能被其他用户读取,就会报错。 解决方法:

  1. 找到id_ed25519文件 → 右键「属性」→「安全」→「高级」
  2. 点击「禁用继承」→ 选择「将继承的权限转换为此对象的显式权限」
  3. 删掉所有用户,只保留你自己的账号,权限给「完全控制」
  4. 确定保存后再尝试登录

4. 还是不行?开启调试模式看原因

登录时加-v参数,会打印详细的调试日志,能看到具体是哪一步失败了:

ssh -v root@192.168.1.100

在输出里找debug1:的提示,一般能定位到是密钥没找到、权限不对、还是服务端拒绝。


八、补充实用知识

  1. 一对密钥可以用在多台服务器上:不用每台服务器生成一对密钥,把同一个公钥放到所有你要登录的设备上就行,管理起来更方便。
  2. 私钥一定要备份好:私钥丢了就再也登不上了(如果禁用了密码的话);同时绝对不能泄露给别人。
  3. 私钥密码短语 + ssh-agent:给私钥设置了密码短语,又不想每次都输,可以用ssh-agent缓存密码,输入一次管一天。
  4. OK62xx 嵌入式设备注意:
    • 如果是出厂系统,一般默认开启 SSH(多数是 dropbear 轻量 SSH 服务)
    • dropbear 同样支持密钥认证,公钥路径也是~/.ssh/authorized_keys,权限要求一致
    • 部分极度精简的系统可能需要手动开启公钥认证功能,查对应开发板的手册即可。

相关新闻

  • 2026年7月最新沈阳百达翡丽官方售后客户服务热线与维修网点地址汇总 - 百达翡丽官方售后中心
  • Docker容器化实战:从零构建Web应用镜像与部署指南
  • 亲身探访杭州天梭官方售后服务中心|地址与24小时服务电话(2026年7月最新) - 天梭服务中心

最新新闻

  • Godot 3D游戏物理碰撞优化实战:从原理到性能提升
  • 后端技术栈选型指南:从业务需求出发
  • 游戏引擎集成RmlUi:高性能UI解决方案的架构设计与实战
  • Unity粒子系统性能优化实战:从火焰特效拆解10大关键属性调优
  • AI绘画巨构场景生成:光影对比与提示词优化实战指南
  • 软装设计师个人作品展示网站源码|Bootstrap5搭建,6页完整结构,一键适配多端设备

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号