У /etc/ssh/sshd
для комп'ютера B комплекті:
AllowTcpForwarding yes
TCPKeepAlive yes
З комп’ютера A :
$ ssh -R 2222:localhost:22 ip.of.computer.b
З комп’ютера B :
$ ssh localhost -p 2222
Зауважте, що 2222 - це довільний номер високого порту, який я вибрав. Цей порт на комп’ютері B потім буде тунельований назад через з'єднання SSH, ініціалізовані на комп’ютері А до порту 22. Якщо у вас кілька машин, ви повинні використовувати інший порт для кожної машини.
Для вашого випадку використання ви, ймовірно, захочете запустити це зі сценарію, щоб ви могли зробити його демоном і періодично намагатися повторно підключитися, якщо посилання відхилено. Напевно, ви хочете отримати спеціальний обліковий запис із оболонкою /bin/true
на комп'ютері B для обробки вхідних з'єднань. Потім ви можете налаштувати або одну клавішу, або кілька клавіш для кожної машини, дозволену "додому".
На комп'ютері А ви могли б знайти -n
, -N
і -T
опції корисних відключити його від локального введення (так що він може працювати у фоновому режимі), а не намагатися виконати будь-яку віддалену команду, просто відкрити тунель, а не створювати термінал.
Більшість звичайних методів нересту демона не дуже добре справляються з налаштуванням мережевого тунелю. Проблема в підключенні до мережі зробить спробу перебити стіну вниз, щоб пройти. Проста петля зі сном, щоб чекати, повинна зробити свою справу. Десять хвилин - це приємне число, оскільки воно не затоплює мережу та файли журналів із спробами, якщо є проблема (наприклад, для того, щоб комп’ютер B був офлайн), але він все одно поверне вас досить швидко, якщо з'єднання перервано.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
Такий сценарій може бути запущений під час завантаження /etc/rc.local
. Ваше перша зміна увійти в машину почнеться приблизно через десять хвилин після комп'ютера А чобіт.