Verejný server bez verejnej IP

Takéto niečo samozrejme má zmysel iba pre osobnú potrebu ako napr. možnosť pripojiť sa na svoj domáci server cez SSH či prístup k niektorým svojim súborom cez webserver. Na také niečo potrebujeme ssh klienta a nejaký verejný server (počítač s verejnou IP a OpenSSH serverom) na ktorom máme shell konto (samozrejme prístupné cez SSH :)) a pokiaľ možno poznáme administrátora :). Na použitie v skripte je nutné si vygenerovať kľúč. Z bezpečnostných dôvodov je lepšie vygenerovať nový kľúč aj v prípade, že sa už nejaký na autorizáciu používa. Kľúč sa generuje programom ssh-keygen (viac informácií v manuáli alebo google, dodáva sa v balíku spolu s SSH klientom).

Vytvorenie tunelu je jednoduché:
ssh -R *:2222:127.0.0.1:22 -f -g -n -N user@server.tld -o PreferredAuthentications=publickey
Tento príkaz spôsobí, že sa všetky požiadavky na port 2222 verejného serveru presmerujú na port 22 nášho serveru (22 býva obyčajne SSH daemon). user@server.tld je náš obyčajný login do shell konta. Nie všetky parametre sú nutné, takto to používam ja. Pre podrobnejšie informácie odporúčam konzultovať manuál (man ssh).

Ešte je vhodné na serveri nastaviť v /etc/ssh/sshd_config:
GatewayPorts yes
Vysvetlenie priamo z manuálu (sshd_config(5)):
     GatewayPorts
             Specifies whether remote hosts are allowed to connect to ports
             forwarded for the client.  By default, sshd binds remote port
             forwardings to the loopback address.  This prevents other remote
             hosts from connecting to forwarded ports.  GatewayPorts can be
             used to specify that sshd should allow remote port forwardings to
             bind to non-loopback addresses, thus allowing other hosts to con‐
             nect.  The argument may be “no” to force remote port forwardings
             to be available to the local host only, “yes” to force remote
             port forwardings to bind to the wildcard address, or
             “clientspecified” to allow the client to select the address to
             which the forwarding is bound.  The default is “no”.

Jednoducho by sa na ten port bolo možné dostať iba z toho serveru. Keďže už tam máme shell konto, tak by nemal byť problem tam pristupovať cez neho, ale takto je to pohodlnejšie a prístupnejšie. Po zmene tohoto nastavenia je potrebné SSH daemon reštartovať.

Nakoniec len dodám, že takéto niečo sa dá spraviť aj cez server, na ktorom beží Windows pomocou CopSSH (samostatná inštalácia Cygwin OpenSSH) alebo samotného Cygwin v ktorom sa OpenSSH dá nainštalovať.

História úprav