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 / 主机名 |
|---|---|
客户端 |
|
服务端 |
|
用户 |
|
2️⃣ 生成密钥对(推荐 ed25519)
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(相当于给钥匙再加一把锁)
生成结果:
~/.ssh/ ├── id_ed25519 # 🔑 私钥(打死不能给别人) └── id_ed25519.pub # 📢 公钥(随便发)3️⃣ 把公钥拷贝到服务器(三种姿势)
✅ 姿势一:ssh-copy-id(最推荐)
ssh-copy-id ops@server.local它会自动:
创建
~/.ssh写入
authorized_keys修正权限(新手福音)
✅ 姿势二:手动(适合批量/脚本)
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️⃣ 登录测试
ssh ops@server.local🎉 如果直接进系统,恭喜你:免密成功!
四、常见翻车现场 & 排错指南 🚨
90% 的问题都出在这里!
现象 | 原因 | 解决方案 |
|---|---|---|
Permission denied | 目录权限不对 |
|
Still asking password | SSH 配置未开启 | 见下方 |
连接慢 | DNS 反向解析 |
|
服务端关键配置/etc/ssh/sshd_config
ini
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # ✅ 强烈建议最后再关重启服务:
sudo systemctl restart sshd五、进阶玩法(装 X 用 😎)
🔐 1. SSH Agent(避免反复输 passphrase)
eval $(ssh-agent) ssh-add ~/.ssh/id_ed25519🧱 2. 禁止 root 远程登录
ini
PermitRootLogin no🛡️ 3. 配合 Fail2ban(防暴力破解)
sudo dnf install fail2ban -y六、安全警示(非常重要 ⚠️)
🔴以下内容请你逐字阅读
私钥 = 身份
泄露 = 别人可以冒充你登录服务器
绝对不要:
提交到 GitHub
发给同事
放在网盘
生产环境建议
禁用密码登录
使用非默认端口
定期轮换密钥
法律红线
⚠️ 本文所有操作仅限合法授权环境
❌ 严禁用于未授权服务器访问
❌ 严禁绕过公司/平台安全策略
由此产生的一切法律责任,由操作者自行承担
