autossh 使用参考
2015-02-09 15:07:31 阿炯

autossh 是一个用来启动 ssh 并进行监控的程序,可在需要时重启 ssh,如果程序问题或者是网络问题。其灵感和机制来自于 rstunnel  (Reliable SSH Tunnel). autossh 1.2 的方法已经改变:autossh 使用 ssh 来构造一个 ssh 重定向循环(本地到远程和远程到本地),然后发送测试数据并获得返回结果。

autossh 1.3 增加了一个新的方法:可指定远程 echo 服务的端口用于返回测试数据发送结果。这个避免握手阶段以及所有远程机器端口的冲突问题,而老的 loop-of-forwardings 方法依然可用。

内网主机主动连接到外网主机,又被称作反向连接(Reverse Connection),这样NAT路由/防火墙就会在内网主机和外网主机之间建立映射即可相互通信了。但这种映射是路由网关自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要自动重连机制了。

ssh -N -v -D localhost:8527 root@remote_ssh_server -p remote_ssh_port  
 
新的版本可改写成:
autossh -M 5200 -N -v -D localhost:8527 root@remote_ssh_server -p remote_ssh_port  

autossh -M 5678 -NR 1234:localhost:22 freeoa@12.34.56.78 -p11211

这样将在'12.34.56.78'主机上开启一个本地侦听地址:'127.0.0.1:1234',在该主机上使用'ssh -oPort=1234 freeoa@127.0.0.1',系统会提示输入密码,这样就在外网的机器上登录到了内部的机器上。可以在远程主机上查看所建立起来的连接:
ss -ant
netstat -naut

比之前的命令添加的一个-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连,去掉了一个-f参数,因为autossh本身就会在background运行。
 
试用后,的确效果很好。
-M 5200 是服务器echo机制使用的端口。

autossh -M 5678 -CqTfnN -D 192.168.0.2:7070  freeoa@remote-host

参数解释:
-M为autossh参数, -CqTfnN -D 为ssh参数

-M 5678 : 负责通过5678端口监视连接状态,连接有问题时就会自动重连
-C  :启动数据压缩传输
-q  :安静模式运行,忽略提示和错误
-T  :不占用shell
-f  :后台运行
-n  :配合 -f 参数使用
-N  :不执行远程命令,专为端口转发度身打造
-D 192.168.0.2:7070  :指定一个本地机器 “动态的“ 应用程序端口转发,如果不加IP地址,默认只监听127.0.0.1

当然,这种每次连接都要输入密码的方式有些麻烦,你可以尝试使用ssh-auto-login的方法,使用key方式登录。

Autossh 语法

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

在启动时启动 ssh 通道

我们可以使用 upstart 来在 Ubuntu 下启动 ssh 通道,只需要将如下 autossh.conf 文件放在 /etc/init 目录即可。

# autossh startup Script

description "autossh daemon startup"

start on net-device-up IFACE=eth0
stop on runlevel [01S6]

respawn
respawn limit 5 60 # respawn max 5 times in 60 seconds

script
export AUTOSSH_PIDFILE=/var/run/autossh.pid
export AUTOSSH_POLL=60
export AUTOSSH_FIRST_POLL=30
export AUTOSSH_GATETIME=0
export AUTOSSH_DEBUG=1
autossh -M 0 -4 -N USER@HOSTNAME -D 7070 -o "ServerAliveInterval 60″ -o "ServerAliveCountMax 3″ -o BatchMode=yes -o StrictHostKeyChecking=no -i SSH_KEY_FILE_PATH
end script


-M port 的意思在 man 手册里是这样写的:

Setting the monitor port to turns the monitoring function off, and autossh will only restart ssh upon ssh's exit. For example, if you are using a recent version of OpenSSH, you may wish to explore using the ServerAliveInterval and ServerAliveCountMax options to have the SSH client exit if it finds itself no longer connected to the server. In many ways this may be a better solution than the monitoring port.

如果你的机器不是经常关闭的话,我就使用了tmux工具,将它放入后台工作。