El concepto de hosts bastión no es nada nuevo para la informática. Los hosts de Baston suelen ser sistemas reforzados de cara al público que sirven como punto de entrada a los sistemas detrás de un firewall u otra ubicación restringida, y son especialmente populares con el auge de la computación en la nube.
El ssh
El comando tiene una manera fácil de utilizar hosts bastión para conectarse a un host remoto con un solo comando. En lugar de usar primero SSH en el host bastión y luego usar ssh
en el bastión para conectarse al host remoto, ssh
puede crear la conexión inicial y la segunda mediante usando ProxyJump
.
ProxyJump
El ProxyJump
, o el -J
bandera, se introdujo en ssh
versión 7.3. Para usarlo, especifique el host bastión para conectarse después de -J
bandera, más el host remoto:
$ ssh -J <bastion-host> <remote-host>
También puede establecer nombres de usuario y puertos específicos si difieren entre los hosts:
$ ssh -J user@<bastion:port> <user@remote:port>
El ssh
página man (o manual) (man ssh
) señala que se pueden especificar múltiples nombres de host separados por comas para saltar a través de una serie de hosts:
$ ssh -J <bastion1>,<bastion2> <remote>
Esta característica es útil si hay varios niveles de separación entre un bastión y el host remoto final. Por ejemplo, un host de bastión público que da acceso a un conjunto de hosts de "nivel web", dentro del cual se puede acceder a un grupo de "nivel de base de datos" más protegido.
Hosts proxy de codificación fija en ~/.ssh/config
El -J
proporciona flexibilidad para especificar fácilmente hosts proxy y remotos según sea necesario, pero si un host bastión específico se usa regularmente para conectarse a un host remoto específico, el ProxyJump
la configuración se puede establecer en ~/.ssh/config
para hacer automáticamente la conexión al bastión en ruta al host remoto:
### The Bastion Host
Host bastion-host-nickname
HostName bastion-hostname
### The Remote Host
Host remote-host-nickname
HostName remote-hostname
ProxyJump bastion-host-nickname
Usando la configuración de ejemplo anterior, cuando un ssh
la conexión se realiza así:
$ ssh remote-host-nickname
El ssh
El comando primero crea una conexión con el host bastión bastion-hostname
(el host al que se hace referencia, por apodo, en el ProxyJump
del host remoto configuración) antes de conectarse al host remoto.
Una alternativa:Reenvío de stdin y stdout
ProxyJump
es la forma simplificada de usar una función que ssh
ha tenido durante mucho tiempo: ProxyCommand
. ProxyCommand
funciona reenviando la entrada estándar (entrada estándar) y la salida estándar (salida estándar) desde la máquina remota a través de los servidores proxy o bastión.
El ProxyCommand
en sí mismo es un comando específico que se usa para conectarse a un servidor remoto; en el caso del ejemplo anterior, sería el manual ssh
comando usado para conectarse primero al bastión:
$ ssh -o ProxyCommand="ssh -W %h:%p bastion-host" remote-host
El %h:%p
argumentos al -W
marca arriba especifica para reenviar el estándar de entrada y salida al host remoto (%h
) y el puerto del host remoto (%p
).
ProxyCommand
en ~/.ssh/config
Al igual que con ProxyJump
, ProxyCommand
se puede configurar en ~/.ssh/config
archivo para hosts que siempre usan esta configuración:
Host remote-host
ProxyCommand ssh bastion-host -W %h:%p
Con esta configuración en ~/.ssh/config
, cualquier ssh
la conexión al host remoto se logra reenviando stdin y stdout a través de una conexión segura desde bastion-host
.
El ssh
El comando es una herramienta poderosa. Si bien podría usarse principalmente en su forma más simple, ssh user@hostname
, hay literalmente docenas de usos, con indicadores y configuraciones para realizar conexiones de un host a otro. Echa un vistazo a ssh
página del manual (man ssh
) en algún momento para descubrir todas las diferentes opciones disponibles con este programa aparentemente simple.