SSH Jump host

Als je meerdere servers hebt, dan is het aangeraden om een intern, management-only, netwerk te voorzien, om beheertaken (DNS, Puppet, Zabbix enz.) uit te voeren die je niet via het publieke netwerk wil sturen. Uiteraard heeft dit netwerk geen toegang tot het internet. Gezien mijn hosts niet allemaal in hetzelfde datacenter zitten, en ik geen geld heb voor een dedicated link, gebruik ik OpenVPN voor het achterliggende netwerk.

Nu wil ik wel kunnen inloggen op alle hosts via dit netwerk, voornamelijk omdat ik dan de interne domeinnamen kan gebruiken. Maar daarvoor heb je natuurlijk een toegang nodig, de jump host. Voor mij is dat de VPN-server (bereikbaar via SSH vanop het publieke netwerk).

Uiteraard ondersteunt SSH dit, en het is zelfs niet zo moeilijk.

Zeg dat alle hosts zich in het interne *.dc.helptux.be-domein bevinden, en dat pieter de gebruiker is om aan te loggen. vpn.helptux.be is de domeinnaam van de VPN-server (dit werkt ook met IP-adressen).

Voeg dan het volgende toe in $home/.ssh/config:

Host *.dc.helptux.be
ProxyJump vpn.helptux.be

Omdat SSH eerst inlogt op de jump host kan je de hostnamen van het interne netwerk en de interne DNS-server gebruiken, zolang de jump host de domeinnamen kan resolven natuurlijk.

Als jouw lokale gebruiker niet gelijk is aan de gebruiker op de jump host, voeg dan je gebruikersnaam toe aan de jump host:

ProxyJump [email protected]

Uiteraard kan je ook User en IdentityFile toevoegen, maar let wel dat IdentityFile de locatie is op jouw lokaal systeem (bv. laptop) en niet op de jump host. User is de gebruiker waarmee je inlogt op de uiteindelijke host, niet de jump host.

Voor gebruikers van een OpenSSH-versie onder 7.3 werkt het bovenstaande, mooie commando niet. Maar, niet getreurd, ook voor hen is er hulp! In plaats van ProxyJump user@jumphost moet je het volgende in $home/.ssh/config plaatsen:

ProxyCommand ssh [email protected] -W %h:%p

Nu werkt het ook op Ubuntu …