2、远程运维基础:SSH协议原理、密钥对认证 vs 密码认证、SSH客户端配置(OpenSSH、Putty)
2.1 SSH协议:远程运维的“安全隧道”
做运维这么多年,我每天打交道最多的工具就是SSH。说白了,SSH就是一条加密的隧道,让你能安全地钻进服务器里干活。
它的核心逻辑其实很简单:
- 身份验证:确认“你是谁”
- 加密传输:保证“别人看不懂”
- 完整性校验:防止“中途被篡改”
我记得刚入行时,有同事直接用Telnet连服务器,密码明文传输。后来被安全审计抓了个正着,差点背处分。从那以后,我团队里谁要是敢不用SSH,我直接让他写检讨。
核心要点:SSH默认监听22端口,采用客户端-服务器(C/S)架构。客户端发起连接,服务器响应并协商加密算法。
2.2 密钥对认证 vs 密码认证:谁更靠谱?
这个问题我经常被问到。我的回答很直接:能用密钥就别用密码。
咱们来对比一下:
| 对比项 | 密码认证 | 密钥对认证 |
|---|---|---|
| 安全性 | 低,易被暴力破解 | 高,2048位RSA几乎不可破解 |
| 便捷性 | 每次都要输入 | 配置一次,永久免密 |
| 管理成本 | 密码过期、遗忘频繁 | 私钥保管好就行 |
| 适用场景 | 临时访问、测试环境 | 生产环境、自动化脚本 |
我曾经遇到过一家客户,几百台服务器全用密码认证。结果某天被扫到弱口令,一夜之间被植入挖矿程序。嗯,那场面,运维团队通宵干了三天才清理干净。
避坑指南:我曾经见过有人把私钥直接放在Git仓库里公开。这相当于把家门钥匙挂在门口。私钥一定要设置密码保护(passphrase),并且存放在安全位置。
2.3 SSH客户端配置:OpenSSH vs Putty
工欲善其事,必先利其器。我平时主要用OpenSSH(Linux/Mac自带),偶尔在Windows上会用Putty。下面分别说说。
2.3.1 OpenSSH:命令行党的最爱
OpenSSH是Linux系统的标配,也是我个人的首选。它的配置都在 ~/.ssh/config 文件里,写好了能省不少事。
举个例子,我管理几十台服务器,每台IP、端口、用户都不一样。如果每次都敲完整命令,手都得废掉。所以我习惯这样配置:
# ~/.ssh/config
Host prod-web
HostName 192.168.1.100
Port 2222
User deploy
IdentityFile ~/.ssh/id_rsa_prod
Host dev-db
HostName 10.0.0.50
Port 22
User admin
IdentityFile ~/.ssh/id_rsa_dev
配置完之后,我只需要输入 ssh prod-web 就能连上生产环境的Web服务器。你想想看,是不是方便多了?
小技巧:我习惯在 ~/.ssh/config 里加上 ServerAliveInterval 60,这样SSH连接每60秒发一次心跳包,防止长时间空闲被断开。尤其是跑长任务时,这个配置能救命。
2.3.2 Putty:Windows下的老牌工具
Putty虽然界面简陋,但胜在轻量、稳定。我早期在Windows上做运维时,Putty是标配。
配置要点:
- Session:填写主机名和端口,保存会话
- Connection -> Data:设置自动登录的用户名
- Connection -> SSH -> Auth:加载私钥文件(.ppk格式)
- Window -> Translation:字符集选UTF-8,防止中文乱码
这里有个坑:Putty的私钥格式和OpenSSH不通用。你需要用Putty自带的 puttygen.exe 工具,把OpenSSH的私钥转换成.ppk格式才能用。
我的建议:如果你主要在Windows上工作,可以试试Windows Terminal + OpenSSH客户端(Win10/11自带)。体验比Putty好很多,而且配置文件和Linux完全兼容。
2.4 知识体系结构图
下面这张图,是我梳理的本章知识脉络。你看一眼就能明白SSH远程运维的核心逻辑。
2.5 实战:快速配置密钥对认证
光说不练假把式。下面我带你走一遍完整的密钥对配置流程。
第一步:生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
执行后会提示你输入保存路径和密码短语(passphrase)。我建议密码短语一定要设,哪怕简单点也行。这样即使私钥丢了,别人也连不上。
第二步:将公钥上传到服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
这个命令会自动把公钥追加到服务器的 ~/.ssh/authorized_keys 文件里。如果没有 ssh-copy-id,也可以手动复制粘贴。
第三步:测试连接
ssh user@server_ip
如果配置正确,你就不需要输入密码了。如果提示输入密码,说明公钥没配好,检查一下 authorized_keys 文件的权限(必须是600)。
注意:配置好密钥认证后,建议在服务器上关闭密码认证。编辑 /etc/ssh/sshd_config,找到 PasswordAuthentication 改为 no,然后重启SSH服务。这样能彻底杜绝暴力破解。
好了,关于SSH远程运维的基础知识,我就讲到这里。这些内容看着简单,但都是日常工作中最常用的。你把这些吃透了,后面讲自动化运维、堡垒机什么的,学起来会轻松很多。