Ответ довольно прост. Когда упаковка в ящики инфраструктуры SSP не создает набор Веб-сайта, поскольку это настроит Администратора SSP для указания на набор сайта в Таблице SiteMap.
Я не уверен, но я думаю, что путь для администратора SSP так или иначе хранится в Наборе Сайта (Это объяснило бы, почему администратор SSP работает снова, когда исходный набор сайта является insertet назад снова.)
Решение, которое я использую в данный момент, состоит в том, чтобы разделить команду открытия туннеля на две части:
while true; do
PORT=$(((RANDOM %= 1000) + 2000));
ssh "server" "record_port.sh '$PORT';";
ssh -N -R $PORT:localhost:22 -o ServerAliveInterval=30 "server";
sleep 5;
done
Хотя это и не идеально, это означает, что первое ssh-соединение может вернуться после указания номер порта, который будет предпринята попытка, тогда второе соединение ssh может установить туннель без удаленной оболочки.
Это оставляет "record_port.sh" на сервере просто запущенным (без while / sleep):
echo "$PORT" > "/tmp/tunnel.port";
autossh
http://www.harding.motd.ca/autossh/ / http://packages.debian.org/squeeze/autossh ] может отслеживать состояние существующих подключений (передавая трафик через петли переадресации локальных и удаленных портов) и повторно подключать сбойные / сбойные (путем повторного запуска ssh).
netstat -tlp
даст вам идентификатор процесса открытие удаленного порта, что может помочь в отслеживании нового используемого случайного порта.
Мне очень повезло с подобной моделью, но без рандомизации портов. У меня был компьютер, который я назову «Hider» за удаленным NAT, подключенным напрямую к локальному центральному серверу, который я назову «Home» с общедоступным IP. Целью этой ссылки SSH было создание порта на стороне Home, используемого для доступа к SSH на Hider.
Вот сценарий, запущенный на Hider:
#/bin/sh
# script: allow-ssh-from-home
unset DISPLAY
interval=30
while : ; do
echo opening tunnel at `date +'%Y-%m-%d %H:%M:%S %Z'`
if ssh -NC \
-o IdentitiesOnly=yes \
-o IdentityFile=$HOME/.ssh/id_rsa-hider-tunnel \
-o CheckHostIP=no \
-o StrictHostKeyChecking=no \
-o UserKnownHostsFile=/dev/null \
-o GSSAPIAuthentication=no \
-o PasswordAuthentication=no \
-o ServerAliveInterval=30 \
-o ExitOnForwardFailure=yes \
-R2222:127.0.0.1:22 \
home.example.com
then
echo Respawning after success...
else
echo Delaying $interval seconds after failure... | tr -d '\012'
sleep $interval
echo done. Respawning...
fi
done
#------------------------------------eof
На Hider файл ~ / .ssh / authorized_keys имеет это (с некоторыми [ elided]):
command="",no-user-rc,no-pty,no-X11-forwarding,no-agent-forwarding ssh-rsa AAA[more keys]RQ== rsa-hider-tunnel-key
На домашней странице ~ / .ssh / config имеет следующее. Обратите внимание на ServerAliveCountMax, позволяющий пропустить больше сообщений keepalive (по умолчанию - 3), прежде чем SSH на Home в противном случае умрет. Та же самая конфигурация, вероятно, присутствовала и на Hider, хотя я не уверен, поскольку это было давно.
Host localhost
NoHostAuthenticationForLocalhost yes
Host *
HashKnownHosts no
FallBackToRsh no
ForwardAgent yes
ForwardX11 yes
Compression yes
ServerAliveInterval 30
ServerAliveCountMax 120
Модель использования на Hider заключается в том, чтобы войти в систему, а затем: