Data publikacji: Jan 14, 2016 2:27:39 PM
Na serwerze "ogólnie dostępnym" tworzymy nowego użytkownika (np. tunnel, bez shella):
adduser --disabled-password --shell /bin/true tunnel
Na serwerze "niedostępnym" również tworzymy nowego użytkownika (np. tunnel) i tworzymy dla niego nowe klucze ssh:
adduser --disabled-password tunnel
su - tunnel
mkdir .ssh
cd .ssh
ssh-keygen
W katalogu domowym wrzucamy załączony niżej tunnel.sh.
Publiczny klucz dodajemy do .ssh/authorized_keys na serwerze "ogólnie dostępnym" dla użytkownika, którego tam utworzyliśmy.
Konfigurujemy skrypt, tworząc w katalogu domowym plik, tunnel-myserver.cfg z zawartością:
SSH_USER=tunnel
SSH_HOST=myserver
SSH_PORT=22
# Tu właściwa konfiguracja portów
SSH_EXTRA="-R 2222:localhost:22"
SSH_SOCKET=/tmp/ssh-tunnel-myserver.sock
Sprawdzamy czy wszystko działa:
tunnel@localhost$ bash tunnel.sh tunnel-myserver.cfg monitor
OK
W liście procesów powinniśmy mieć:
tunnel 30421 0.0 0.0 4760 1128 ? Ss 15:16 0:00 /usr/bin/ssh -M -S /tmp/ssh-myserver.sock -fnNT -R 2222:localhost:22 -o Port=22 tunnel@myserver
Zaś na docelowym serwerze ("ogólnie dostępnym") powinniśmy mieć otwarty port:
tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN 31997/sshd: tunnel
Przez który można się dodać na serwer "niedostępny" komendą:
ssh -C -o Port=2222 root@127.0.0.1
Na koniec pozostaje wszystko dodać do crona, tutaj dodane do crona użytkownika root (należy skorygować ścieżki):
*/1 * * * * tunnel [ -x /home/users/tunnel/tunnel.sh -a -e /home/users/tunnel/tunnel-myserver.cfg ] && /home/users/tunnel/tunnel.sh /home/users/tunnel/tunnel-myserver.cfg monitor >/dev/null