公众号旧文
你以为 SSH 只是远程登录?不,它实际上是一个加密通信工具箱!
你第一次接触 SSH,大概是从这条命令开始的:
ssh root@服务器IP
输入密码,进入服务器,然后开始敲命令。
于是,大多数人对 SSH 的理解就停留在 SSH 只是一个远程登录工具。
但如果只把 SSH 当成远程登录工具,那你就太小瞧它了。
一、SSH 的本质:一条加密管道
SSH,全称是 Secure Shell,本意是安全的命令行。
但在实际设计中,它远不止是一个Shell。
更准确地说:SSH 是一个通用的加密通信通道。
你可以把它想象成一根加密的水管:
- 一头是你的本地电脑
- 一头是远程服务器
- 中间所有流动的数据,都会被加密
而关键在于这根管子里流的,不一定只是命令行。
二、文件传输:不知不觉在用 SSH
很多人用过 scp 或 sftp:
scp file.txt user@host:/tmp/
或者:
sftp user@host
表面上看,这是文件传输工具。 但实际上,这些工具的底层依赖,依然是 SSH。
也就是说你传的每一个文件,都是走在 SSH 这条加密通道里的。
SSH 并不关心你传的是命令还是文件,它只负责安全地把数据送过去。
三、真正的核心能力:端口转发
如果说远程登录只是入门级玩法,那端口转发,才是 SSH 的精髓。
1. 本地端口转发
ssh -L 8080:目标服务器:80 user@中间服务器
这条命令做了什么?
- 你访问本地的
localhost:8080 - 实际访问的是远程某台机器的 80 端口
也就是说 SSH 帮你把本地请求搬到了另一台机器上。
2. 远程端口转发
ssh -R 8080:localhost:3000 user@服务器
这次反过来:
- 远程服务器访问
localhost:8080 - 实际访问的是你本地的 3000 端口
这在许多场景下非常实用,比如临时对外提供服务。
3. 动态端口转发
ssh -D 1080 user@服务器
这一条命令直接在你本地开启了一个 SOCKS 代理端口(1080)
此时,任何支持 SOCKS 代理的软件,都可以把流量交给这个端口,由 SSH 负责转发。
四、一个很典型的使用场景
这里举一个很多人用过的浏览器插件 SwitchyOmega。
SwitchyOmega 并不是提供网络能力,而是:
- 帮你配置浏览器的代理
- 决定哪些请求走代理,哪些直连
- 在不同规则之间切换
当你把它指向:
127.0.0.1:1080
整个流程就变成了:
浏览器 → SwitchyOmega → 本地1080端口 → SSH → 远程服务器 → 目标网站
可以看到:
- SwitchyOmega 只是调度员
- 真正负责传输数据的,是 SSH
五、多路复用:一条连接干多件事
SSH 还有一个不太显眼,但非常强大的能力多路复用。
简单来说,一条 SSH 连接里,可以同时承载多个通道:
- 一个用来执行命令
- 一个用来传文件
- 一个用来做端口转发
而这些数据,全部共享同一条加密连接。
这意味着你不需要为每一个任务单独建立连接,效率更高,也更优雅。
六、认证方式:从密码到密钥
大多数人最初使用 SSH,是输入密码登录。
但更推荐的方式,是使用密钥:
ssh-keygen
生成一对:
- 公钥(放在服务器)
- 私钥(保存在本地)
之后登录时:
- 不再需要输入密码
- 安全性更高
- 更适合自动化操作
这也是为什么在运维、自动部署等场景中,SSH 几乎是标配。
很多工具看起来简单,是因为你只用到了它最基础的部分。
SSH 就是一个典型的例子。