У меня есть сервер, на котором размещены туннели SSH, и к нему подключаются клиенты Openbsd 4.5.
Все работает нормально, но мне нужно автоматизировать соединение от клиента к серверу. Таким образом, если клиент случайно перезагружается, соединение инициируется автоматически.
Таким образом, это должно быть так же просто, как включить соединение ssh в сценарий инициализации. Однако мне ужасно не удалось этого сделать, включив его в /etc/rc.local, это файл, с которым я обычно делаю подобные вещи.
Прямо сейчас я использую автосш чтобы также перезапустить соединение, если необходимо, и сценарий, который я помещаю в /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
Ваш вклад очень признателен.
Мне не удалось полностью понять ваш вопрос: вы уверены, что ваш autossh запущен? Если вы не обнаружите, что туннель открыт после перезапуска, возможно, он даже не запущен или завершился немедленно из-за ошибки. Если хотите проверить это, вы можете вставить вызов команды "logger" и записать сообщение через syslog до и после запуска autossh, чтобы вы были уверены, что он запущен. Включите переменную оболочки $ rc во второй вызов команды "logger".
Другой вариант - запустить ssh (без autossh) из / etc / inittab, как описано в этом другом вопросе: runuser в rc.local