我有一个托管 SSH 隧道的服务器和连接到它的 Openbsd 4.5 客户端。
一切运行正常,但我需要自动建立从客户端到服务器的连接。这样,如果客户端意外重新启动,连接就会自动启动。
因此,这应该和将 ssh 连接包含在 init 脚本中一样简单。但是,我未能将其包含在 /etc/rc.local 中,而我通常在这个文件中执行此类操作。
现在我正在使用自动SSH如果有必要的话还要重新启动连接,我放在 /etc/rc.local 上的脚本如下:
#!/bin/sh
#
# Example script to start up tunnel with autossh.
#
# This script will tunnel 2200 from the remote host
# to 22 on the local host. On remote host do:
# ssh -p 2200 localhost
#
# $Id: autossh.host,v 1.6 2004/01/24 05:53:09 harding Exp $
#
ID=root
HOST=example.com
#AUTOSSH_POLL=600
#AUTOSSH_PORT=20000
#AUTOSSH_GATETIME=30
#AUTOSSH_LOGFILE=$HOST.log
#AUTOSSH_DEBUG=yes
#AUTOSSH_PATH=/usr/local/bin/ssh
export AUTOSSH_POLL AUTOSSH_LOGFILE AUTOSSH_DEBUG AUTOSSH_PATH AUTOSSH_GATETIME AUTOSSH_PORT
autossh -2 -f -M 20000 ${ID}@${HOST}
该脚本在手动运行时可以很好地分离,因此我只需将其包含在 /etc/rc.local 中即可
echo -n 'starting local daemons:'
if [ -x /usr/local/sbin/autossh.sh ]; then
echo -n 'ssh tunnel'
/usr/local/sbin/autossh.sh
fi
echo '.'
我还尝试从 /etc/hostname.tun0 调用它,以防在网络连接准备就绪时无法在正确的时间调用 /etc/rc.local,因此我会使用:
inet 10.254.254.2 255.255.255.252 10.254.254.1
!/usr/local/sbin/autossh.sh
非常感谢您的意见。
答案1
我无法完全理解您的问题:您确定您的 autossh 已运行吗?如果您在重新启动时没有发现隧道打开,则可能是它甚至没有启动,或者由于错误而立即完成。如果要检查它,您可以在运行 autossh 之前和之后插入对“logger”命令的调用并通过 syslog 记录一条消息,这样您就可以确定它已运行。请在对“logger”命令的第二次调用中包含 shell $rc 变量。
另一个选择是从 /etc/inittab 运行 ssh(不使用 autossh),如另一个问题所述:rc.local 中的 runuser