Удалённая помощь через SSH
Создание туннеля
Проброс порта с компа спрятанного за файрволом (workstation) на личный vps.org (учётка user):
workstation:22 ⇔ vps.org:2222
employee@workstation:~$ ssh -R 2222:localhost:22 user@vps.org
# ... Авторизация на user@vps.org (проверка пароля и/или ключа)
user@vps.org:~$
Подключение к компу спрятанному за файрволом:
# Подключаемся к vps:
user@home:~$ ssh user@vps.org
# ... Авторизация на user@vps.org (проверка пароля и/или ключа)
# Теперь с vps.org можно подключиться к workstation
user@vps.org:~$ ssh -p 2222 employee@localhost
# ... Авторизация на employee@workstation (проверка пароля и/или ключа)
employee@workstation:~$
Скрипт для автоподключения
Цикл автоподключения был нагуглен в интернете и немного изменён:
#!/bin/bash
########################## Настройки: ###########################
HOST=vps.org
USER=user
########## Программа соединения с сервером ##########
SSHCMD="ssh -Tq -o ServerAliveInterval=5 \
-o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
$USER@$HOST"
while true; do
PORT=`$SSHCMD`
if test 0${PORT} -gt 0; then
$SSHCMD -NC -R "*:${PORT}:127.0.0.1:22"
fi
sleep 120
done
Во-первых, скрипт основан на бесконечном цикле с паузой для переподключений при разрывах. Во-вторых, для удачного соединения скрипт осуществляет два подключения. При первом получает порт на который можно пробросить свой ssh-порт (22), при втором открывает туннель.
Для корректной работы от сервера тоже требуется соблюдать правила:
- Наличие ключа для авторизации без пароля
- Параметры для авторизации по ключу
command="/bin/echo 2222",no-user-rc,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa <client_public_key>