本地转发

基本设置

假设有一个启动在远程服务器的service,提供了访问的端口号,而本地的电脑想访问这个服务。但是可能由于远程服务器无公网地址等原因,无法直接访问到这个服务。这时候就可以通过配置ssh的端口转发,将访问本地端口的所有请求,转发到对应的远程端口。在建立ssh连接时可以这样写命令:

1
ssh -L <远程服务的端口号>:<本地的ip(127.0.0.1)>:<本地的端口号> <user>@<server_ip> -p <port> -N

参数说明:
-L: 表示将本地的访问请求,通过本地的端口,转发到远程的端口上。
-p: 连接ssh的端口,默认是22。
-N: 表示不运行shell,让ssh只充当端口转发的隧道。

保持链接

上面的设置非常常用,短期用来调试一下没有问题。但是,如果想要ssh连接保持较长时间运行,不会因为空闲停止,就需要设置ServerAliveInterval参数ssh使其能够keep alive。

1
ssh -L <远程服务的端口号>:<本地的ip(127.0.0.1)>:<本地的端口号> <user>@<server_ip> -p <port> -o ServerAliveInterval=60 -N

在连接的命令添加了-o ServerAliveInterval=60,表示的是本机每60秒通过ssh向服务器发送一个心跳请求,然后服务器响应,定期保持ssh不会中断连接。

远程转发

与本地端口转发相反,将-L替换成-R,其他参数做对应的转变即可。
可以这样记忆:
-L: Local。
-R: Remote。

参考文档

  1. SSH 配置端口转发
  2. SSH 端口转发
  3. ssh端口转发和链接保活