W /etc/ssh/sshd
na komputerze B zestawie:
AllowTcpForwarding yes
TCPKeepAlive yes
Z komputera A :
$ ssh -R 2222:localhost:22 ip.of.computer.b
Z komputera B :
$ ssh localhost -p 2222
Zauważ, że 2222 to arbitralny numer wysokiego portu, który wybrałem. Ten port na komputerze B zostanie następnie tunelowany z powrotem przez połączenie SSH zainicjowane na komputerze A do portu 22. Jeśli masz wiele komputerów, powinieneś użyć innego portu dla każdego komputera.
W twoim przypadku prawdopodobnie będziesz chciał uruchomić to ze skryptu, aby uczynić go demonem i okresowo próbować łączyć się ponownie, jeśli połączenie zostanie zerwane. Prawdopodobnie będziesz potrzebować specjalnego konta z powłoką tylko /bin/true
na komputerze B do obsługi połączeń przychodzących. Następnie możesz skonfigurować jeden klucz lub wiele kluczy dla każdego urządzenia, które mogą „zadzwonić do domu”.
Na komputerze A można znaleźć -n
, -N
a -T
opcje użyteczne odłączyć go od wejścia lokalnego (więc może działać w tle), nie próbować uruchomić żadnego polecenia zdalnego, wystarczy otworzyć tunel, a nie tworzyć tty.
Większość normalnych metod odradzania demona nie działa zbyt dobrze przy konfigurowaniu tunelu sieciowego w ten sposób. Problem z łącznością sieciową spowodowałby, że próbowała zburzyć mur, aby się przedostać. Prosta pętla ze snem do oczekiwania powinna załatwić sprawę. Dziesięć minut to niezła liczba, ponieważ nie powoduje zalania sieci i plików dziennika z próbami, jeśli występuje problem (na przykład, gdy komputer B jest w trybie offline), ale mimo to połączenie jest dość szybkie.
#/bin/sh
while true; do
sleep $((60*10))
ssh -nNT -R 2222:localhost:22 ip.of.computer.b
done
Taki skrypt można uruchomić podczas rozruchu /etc/rc.local
. Twoja pierwsza zmiana zalogować się do urządzenia rozpocznie około dziesięciu minut po komputerze z butami.