Удалённая помощь через 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), при втором открывает туннель.

Для корректной работы от сервера тоже требуется соблюдать правила:

  1. Наличие ключа для авторизации без пароля
  2. Параметры для авторизации по ключу
command="/bin/echo 2222",no-user-rc,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa <client_public_key>