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.