SSH 真正讲清楚:握手、密钥与隧道戏法
来源:dev.to — 2026-09-07
📋 概述
作者开头用一个例子勾起好奇:你输入 ssh ubuntu@1.2.3.4,得到提示符,另一大陆的服务器开始听从你的键盘。SSH 在提示符出现前的半秒里做了真正巧妙的事,一旦看清,一整类令人困惑的报错就不再令人困惑。telnet 是明信片,SSH 是上锁的公事包——邮差是同一个人,这正是关键。SSH 叠加了三层:让两个陌生人能在公共场合商定秘密的密钥交换、以签名挑战证明身份的认证、以及一旦就绪能承载任意其他协议的隧道。
🔑 核心要点
- 两种加密被不断混淆:非对称加密只用于开场握手(慢、涉及公私钥对),对称加密承载对话(一把共享密钥、快、加密你的击键)——握手存在的全部意义就是让双方各自持有同一把会话密钥
- Diffie-Hellman 是核心戏法:双方各生成私值并派生出公值、公开交换公值,再各自用自己私值加对方公值算出同一个数字;旁观者看到两个公值也到不了那里,会话密钥从不传输而是在两个不同国家被独立各算一次
- 密钥是临时且具前向保密性:只为本次会话存在、断开即弃;今天录下流量、明年偷到服务器私钥也解不开捕获——值得记住这个名字
- 主机密钥填认证前的缺口:密钥交换给了你通向「某个人」的安全信道,却未证明那是你要找的服务器——首次连接问的是指纹是否属于你以为的那台机器,known_hosts 一变化就报警,那正是中间人警告存在的理由
- 密钥胜过密码:ed25519 而非 RSA(更小更快更少配置坑);登录是质询-响应,秘密从不跨网络;Permission denied(publickey) 覆盖约六种错误,按序排查——传对密钥、chmod 600、authorized_keys、镜像用户名、目录权限,再用 ssh -vv 与 journalctl -u sshd 定位
💡 金句
Telnet is a postcard. SSH is a locked briefcase. The postman is the same postman in both cases.
👍 0
👎 0
← 返回 dev.to 首页