/etc/inittab 中的 autossh

cli*_*ime 3 ssh-tunneling init

我已经设置了 ssh 隧道,以便能够连接 NAT 后面的目标计算机。我已将以下内容放入计算机上的 /etc/inittab 中:

tu:2345:respawn:/usr/bin/autossh -M 20000 -f -n -N -T -R 6790:localhost:22 me@servername.cz
Run Code Online (Sandbox Code Playgroud)

它有效,即我可以通过发出 ssh -p 6790 me@localhost 进行连接。但是时不时我会在目标计算机上收到以下消息:

INIT: Id "tu" respawning too fast, disabled for 5 minutes
Run Code Online (Sandbox Code Playgroud)

在服务器上的 /var/log/secure 中,我可以看到以下内容:

Oct 29 03:11:15 vm sshd[19725]: Accepted publickey for me from 90.179.155.74 port 37416 ssh2
Oct 29 03:11:15 vm sshd[19727]: Received disconnect from 90.179.155.74: 11: disconnected by user
Oct 29 03:17:04 vm sshd[20892]: Accepted publickey for me from 90.179.155.74 port 40116 ssh2
Oct 29 03:17:15 vm sshd[20896]: error: bind: Address already in use
Oct 29 03:17:19 vm sshd[20896]: error: channel_setup_fwd_listener: cannot listen to port: 20000
Run Code Online (Sandbox Code Playgroud)

这种情况还在继续。知道有什么问题吗?

cli*_*ime 5

好的,找到答案了。如果使用 -f 选项调用 autossh,它会将自己派生为守护进程并且父进程退出。因此 init 再次重生它......一次又一次......

我想我不应该使用 autossh 但只是 ssh 因为重生是由 init 完成的,我想,不需要由 autossh 再次自动重生。我把这条线改成了 tu:2345:respawn:/usr/bin/ssh -n -N -T -R 6791:localhost:22 me@servername.cz

我还加了

ServerAliveInterval 15
ServerAliveCountMax 2
Run Code Online (Sandbox Code Playgroud)

进入 /etc/ssh/ssh_config 以保持连接有效。

我认为这种设置可能效果很好。