SSH a hosts remotos a través de proxy o bastión con ProxyJump

La noción de anfitriones bastión no es nada nuevo en informática. Los hosts de Baston suelen ser sistemas reforzados de acceso 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 usar hosts bastión para conectarse a un host remoto con un solo comando. En lugar de primero SSH al host bastión y luego usar ssh en el bastión para conectarse al host remoto, ssh puede crear las conexiones inicial y segunda usando ProxyJump.

Índice

ProxyJump

el ProxyJump, o la -J bandera, se introdujo en ssh versiones 7.3. Para usarlo, especifique el host bastión al que conectarse después de la -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 hosts:

$ ssh -J [email protected]<bastion:port> <[email protected]:port>

el ssh página man (o manual) (man ssh) señala que se pueden especificar varios nombres de host separados por comas para explorar 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 bastión público que proporciona acceso a un conjunto de hosts de "nivel web", dentro del cual se puede acceder a otro grupo protegido de "nivel de base de datos".

Codificación de hosts proxy 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 establecer 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 hace de la siguiente manera:

$ 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 alias, en la carpeta del host remoto ProxyJump configuración) antes de conectarse al host remoto.

Una alternativa: pasar stdin y stdout

ProxyJump es la forma simplificada de usar una característica que ssh tiene desde hace mucho tiempo: ProxyCommand. ProxyCommand funciona al pasar la entrada estándar (stdin) y la salida estándar (stdout) desde la máquina remota a través de 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, ese sería el manual ssh Comando utilizado para conectarse a Bastion primero:

$ ssh -o ProxyCommand="ssh -W %h:%p bastion-host" remote-host

el %h:%p argumentos a la -W El indicador anterior especifica que se reenvíe la entrada y salida estándar al host remoto (%h) y el puerto de host remoto (%p).

ProxyCommand dentro ~/.ssh/config

como con ProxyJump, ProxyCommand se puede establecer en el ~/.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, ningún ssh la conexión al host remoto se realiza pasando stdin y stdout a través de una conexión segura desde bastion-host.

el ssh El comando es una herramienta poderosa. Aunque se puede usar principalmente en su forma más simple, ssh [email protected], hay literalmente docenas de usos, con banderas y configuraciones para establecer conexiones de un host a otro. Para verificar sshla página man para (man ssh) para descubrir todas las diferentes opciones disponibles con este programa aparentemente simple.

Artículos de interés

Subir