SSH 能够方便我们连接远程服务器,而且,数据的传输是通过加密的方式进行的。有时候,想要进行远程端口转发或者本地端口转发时,总是会因为网络不稳定等以及其他原因导致 SSH 连接中断,这就导致转发的不稳定。本篇介绍一个工具 autossh,它能够保持 SSH 连接的稳定性,即使断网,当网络恢复时也能够自动连接。以 Ubuntu 18.04 为例。

安装 autossh

1
2
sudo apt update
sudo apt install autossh

如果是 Mac 系统,可以使用如下命令:

1
brew install autossh

autossh 命令介绍

autossh 工具自带的参数不多,但 ssh 命令带的参数很多。autossh 命令可以代替 ssh,并且使用 ssh 命令的参数。ssh 的参数可以使用 man ssh 查看。

autossh 的简单语法:

1
autossh [-V] [-M port[:echo_port]] [-f] [SSH_OPTIONS]

autossh 自带的参数有

  • V: causes autossh to display its version number and exit.
  • M: specifies the base monitoring port to use. 该参数是重要参数,用于保持 SSH 连接出问题的监控端口,一般在本地服务器上需要保证设置的该”端口”和”端口 + 1”打开 。
  • f: causes autossh to drop to the background before running ssh. 该参数类似于 ssh 的参数。

autossh 可以使用 ssh 的参数,参数介绍以及如何使用 ssh 进行端口转发,请参考:SSH 转发知识汇总SSH 转发的一些记录.

autossh 的使用

1
autossh -M 8080 -f -R 3030:127.0.0.1:22 -NT -g jinzhongxu@hellokitty.com

使用 autossh 进行远程端口转发,将本地 127.0.0.1 的 22 端口映射到远程服务器 hellokitty.com 上的 3030 端口。这样就可以连接远程服务器的 3030 端口达到连接本地的 22 端口。

  • -M:表示 hellokitty.com 上的监控端口,请在服务器上将 8080 和 8081 端口开放
  • -f: 使 ssh 进程在用户输入密码之后转入后台运行
  • -R: 将代理服务器指定端口上的连接转发到本机端口
  • -N: 只连接远程主机,不打开远程shell。(不执行远程指令,即代理服务器不需执行指令,只作端口转发)
  • -T: 不分配伪终端 tty
  • -g: 允许代理服务器连接到本地转发端口

注意:远程端口转发需要设置 /etc/ssh/sshd_configGatewayPorts yes 。默认情况下,OpenSSH 只允许从服务器主机连接到远程转发端口。能够防止从服务器计算机外部连接到转发端口。设置成 ‘yes’ 后,外部主机就可以连接了。

参考链接

  1. autossh工具进行端口转发
  2. 用autossh工具进行端口转发