Linux SSH免密登录:从“刷卡进门”到“刷脸通行”的完整指南

适用环境:OpenSSH 9.x + Linux (Ubuntu 22.04 / Rocky Linux 9 验证)

难度系数:⭐⭐☆☆☆(只要你会敲命令就能懂)

阅读收益:告别 password:输入焦虑,实现自动化运维第一步


一、为什么我们要搞「免密」?------ 先讲个故事

想象一下:

  • 普通 SSH:每次进门都要掏钥匙 ➜ 输密码 ➜ 手抖输错 ➜ 再输一遍 😩

  • 免密 SSH:第一次录入指纹,之后直接刷脸进门 ➜ 丝滑顺畅 🚀

真实痛点场景:

  • 你有 10 台服务器,每天要登 20 次

  • 写了自动化脚本,却卡在密码输入这一步

  • CI/CD 流水线需要无交互登录

👉 结论:不会免密,不算真·运维


二、核心原理(不讲废话版)

SSH 免密 ≠ 没有认证

而是把 "密码认证" ​ 换成了 "密钥认证"

方式 安全性 自动化友好度
密码登录 ⭐⭐
密钥登录 ⭐⭐⭐⭐⭐

本质流程:

复制代码
本机(私钥 id_rsa)  ------→  服务器(公钥 id_rsa.pub)

👉 私钥 = 你家钥匙

👉 公钥 = 门锁里存的指纹

只有钥匙匹配,门才会开。


三、实战开始:一步步来,绝不跳步 🛠️

1️⃣ 环境假设(照着改就行)

角色 IP / 主机名
客户端 client.local
服务端 server.local
用户 ops

2️⃣ 生成密钥对(推荐 ed25519)

bash 复制代码
ssh-keygen -t ed25519 -C "ops@client"

📌 为什么要 ed25519?

  • 比 RSA 更快

  • 更安全

  • OpenSSH 官方推荐 ✅

交互过程示例:

复制代码
Enter file in which to save the key (/home/ops/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

建议:

  • 回车默认路径

  • 生产环境建议设置 passphrase(相当于给钥匙再加一把锁)

生成结果:

bash 复制代码
~/.ssh/
├── id_ed25519      # 🔑 私钥(打死不能给别人)
└── id_ed25519.pub  # 📢 公钥(随便发)

3️⃣ 把公钥拷贝到服务器(三种姿势)

✅ 姿势一:ssh-copy-id(最推荐)
bash 复制代码
ssh-copy-id ops@server.local

它会自动:

  • 创建 ~/.ssh

  • 写入 authorized_keys

  • 修正权限(新手福音)


✅ 姿势二:手动(适合批量/脚本)
bash 复制代码
cat ~/.ssh/id_ed25519.pub | ssh ops@server.local \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

✅ 姿势三:Ansible 批量(高阶彩蛋)

yaml

复制代码
- authorized_key:
    user: ops
    state: present
    key: "{{ lookup('file', '~/.ssh/id_ed25519.pub') }}"

4️⃣ 登录测试

bash 复制代码
ssh ops@server.local

🎉 如果直接进系统,恭喜你:免密成功!


四、常见翻车现场 & 排错指南 🚨

90% 的问题都出在这里!

现象 原因 解决方案
Permission denied 目录权限不对 chmod 700 ~/.ssh
Still asking password SSH 配置未开启 见下方
连接慢 DNS 反向解析 UseDNS no

服务端关键配置 /etc/ssh/sshd_config

ini

复制代码
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no   # ✅ 强烈建议最后再关

重启服务:

bash 复制代码
sudo systemctl restart sshd

五、进阶玩法(装 X 用 😎)

🔐 1. SSH Agent(避免反复输 passphrase)

bash 复制代码
eval $(ssh-agent)
ssh-add ~/.ssh/id_ed25519

🧱 2. 禁止 root 远程登录

ini

复制代码
PermitRootLogin no

🛡️ 3. 配合 Fail2ban(防暴力破解)

bash 复制代码
sudo dnf install fail2ban -y

六、安全警示(非常重要 ⚠️)

🔴 以下内容请你逐字阅读

  1. 私钥 = 身份

    • 泄露 = 别人可以冒充你登录服务器

    • 绝对不要:

      • 提交到 GitHub

      • 发给同事

      • 放在网盘

  2. 生产环境建议

    • 禁用密码登录

    • 使用非默认端口

    • 定期轮换密钥

  3. 法律红线

    ⚠️ 本文所有操作 仅限合法授权环境

    ❌ 严禁用于未授权服务器访问

    ❌ 严禁绕过公司/平台安全策略

    由此产生的一切法律责任,由操作者自行承担

相关推荐
遇见小修修17 分钟前
佛山工厂打印机频繁漏粉、页面脏污、机身飞粉?零基础排查+长效解决教程
运维·打印机维修·打印机故障·专业维修
koi77u19 分钟前
嵌入式学习————————TCP并发服务器(1)
linux·学习
上学的小垃圾8 小时前
基于docker安装MySQL(openEuler系统)
linux·mysql·docker·容器
一直C10 小时前
Linux网络编程|HTTP协议详解(报文、请求方法、状态码)
linux·http·wireshark·vim·visual studio
爱喝水的鱼丶10 小时前
SAP-ABAP:ABAP 用户出口开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流·出口
博、、11 小时前
从零构建智慧场馆解决方案:架构设计与开发实践
大数据·运维
敢敢是只喵i11 小时前
给现有业务系统接 AI 助手,入口怎么选?网页聊天、自动化任务与本地 Agent 对比
运维·人工智能·ai·开源·自动化·安全架构
章老师说12 小时前
BFE v1.8.6 正式发布:AI 网关计费精细化、Claude 协议与会话亲和性升级
运维·人工智能·ai·负载均衡·ai-native
Brilliantwxx12 小时前
【Linux】 进程(10) 进程控制深度解析:创建、终止与等待
linux·运维·服务器·c语言·开发语言·网络
欧米欧13 小时前
Linux基础指令上
linux·运维·服务器