公众号旧文

你以为 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 就是一个典型的例子。