ssh 命令的代理功能

几种模式

模式有三种:

  1. -L 将本地端口映射到远程(将客户端请求给远程服务器)
  2. -R 将远程端口映射到本地(客户端和远程服务器请求)
  3. -D 动态代理,生成一个 socks 代理,支持 socks(4)/socks5 协议

-R 代理

服务器连不上外网的时候常用这个。见 ssh 代理转发,让服务器上外网

-D 代理

生成一个 socks 代理。如图,我创建代理之后,本地用这个代理去访问网站,实际上是远程服务器代我访问了网站。

-L 代理

我能通过 ssh 连接到服务器,服务器能连接到私有的代码仓库,然后我可以通过本地的端口转发,然后在浏览器上通过 localhost:38930 访问代码仓库:

ssh -N -n -L38930:192.168.236.237:8930 服务器
  • -f 表示程序作为后台程序运行(fork),不怕会话关闭或者按键中断(这里我觉得不太好用,所以不加)。在 Linux 下程序就会直接返回,但是在 Windows 的 cmd 下不会,可能是因为 /dev/null 这个设备不存在?实测在 MSYS2 的 bash 环境中也能正常返回
  • -N 表示不要执行命令,仅仅转发端口。
  • -n 表示从 /dev/null 中重定向输入。若有 -f,则这个选项是隐含的,使用 -t 来代替 -n 可以使得 ssh 重新读取终端的交互输入(但是管道不行)。

其他参考

https://jeremyxu2010.github.io/2018/12/ssh%E7%9A%84%E4%B8%89%E7%A7%8D%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91/