当前位置: 首页 > news >正文

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

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_configPubkeyAuthentication 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,权限要求一致
    • 部分极度精简的系统可能需要手动开启公钥认证功能,查对应开发板的手册即可。
http://www.jsqmd.com/news/1179398/

相关文章:

  • 基础 4 —— Docker 镜像的底层原理
  • 遗传算法工程实战:从早熟停滞到工业部署的参数调优指南
  • 如何在Windows PC上快速配置Switch手柄:BetterJoy终极指南
  • Docker容器化实战:从零构建Web应用镜像与部署指南
  • 2026年7月最新沈阳百达翡丽官方售后客户服务热线与维修网点地址汇总 - 百达翡丽官方售后中心
  • 亲身探访杭州天梭官方售后服务中心|地址与24小时服务电话(2026年7月最新) - 天梭服务中心
  • 现代Windows C++开发实战:从Visual Studio配置到部署全流程解析
  • 打卡信奥刷题(3443)用C++实现信奥题 P10389 [蓝桥杯 2024 省 A] 成绩统计
  • 深度学习模型工作原理:从数据流动到数学直觉与工程实践
  • ET框架12条黄金法则:构建工业级Unity项目的架构与工程实践
  • 如何免费解锁网易云音乐NCM格式:3步快速转换为MP3的完整指南
  • Linux系统基础11:iptables 基本原理 新手超详细详解
  • 每日极客日报 · 2026年07月12日
  • JavaScript 时间与数学魔法:Date 与 Math 对象全攻略
  • Windows 10/11 ping 报“一般故障”:5步定位法与 3 类根因排查指南
  • 营销战略是一种实践|案例分享
  • Windows 11 LTSC企业版:老电脑焕新与系统优化全攻略
  • C/C++ HTTP服务器开发:从请求解析到高并发epoll实现
  • 劳力士中国官方售后服务中心|地址与客户服务热线权威信息声明(2026年7月最新) - 劳力士服务中心
  • 浪琴中国官方售后服务中心|服务电话与网点地址权威信息通知(2026年7月更新) - 浪琴服务中心
  • 小红书内容采集终极指南:XHS-Downloader 完整使用手册
  • kspack-rust实战教程:构建高性能网络通信数据序列化方案
  • 成都成华区跳蹬河街道亨得利官方名表服务中心电话公示(2026年7月最新) - 亨得利官方博客
  • Java 23 种设计模式:从踩坑到精通 | 状态模式 —— if-else 满天飞?让状态自己决定行为
  • 机器人学导论(第4版)核心概念精讲:从位姿描述到雅可比矩阵的5个关键公式
  • Blender3mfFormat:免费开源插件,在Blender中完整处理3MF格式的终极指南
  • 【RPA实战】我用RPA自动化半导体报表:每天2小时手工活变5分钟
  • 百达翡丽官方售后服务中心维修地址与24小时服务电话实地考察报告_多信源验证(2026年7月更新) - 百达翡丽服务中心
  • 2026海口冰块厂家Top3评测!工业降温冰块复购谁更优? - 热点咨讯
  • Windows C++轻量集成OpenAI聊天API:ChatAI-Cpp实战指南