Puerto de coincidencia de host de configuración SSH

4

Tengo un servidor que tiene múltiples "demonios SSH" ejecutándose (en realidad Stash y OpenSSH), con diferentes claves SSH necesarias para cada uno. Estos demonios están escuchando en 2 puertos diferentes.

En la configuración SSH en clientes (específicamente ~/.ssh/config), ¿es posible especificar el puerto en la directiva Host/ Match(o de alguna otra manera), para que pueda anular el IdentityFilepuerto basado en? De esa manera ssh myserver -p 22, y ssh myserver -p 23lo hará tanto de inicio de sesión utilizando las teclas correctas, sin necesidad de configuración adicional.

Cocinero ricky
fuente

Respuestas:

10

Si su cliente ssh es lo suficientemente nuevo, puede usar la Matchpalabra clave del archivo de configuración para tener una configuración condicional basada en el puerto de destino.

Match host somehost exec "test %p = 42"
IdentityFile ...

El ejemplo anterior solo aplicaría la línea "IdentityFile" si el host de destino es "somehost" y el puerto de destino es 42. Matchfunciona de la misma manera Hostque las líneas que le siguen (hasta la siguiente línea Match o Host) solo se aplican a las sesiones que coinciden el criterio. En el ejemplo, la línea Match verifica que el host sea "somehost", y también ejecuta un comando externo que se considera que coincide si el comando sale con el estado 0.

El comando que se ejecuta aquí es test %p = 42. "% p" será reemplazado por el valor del puerto que ssh usaría hasta ese punto (ya sea el valor predeterminado de 22 o el valor de la línea de comando). testtambién se conoce como [; Es una utilidad de línea de comandos utilizada principalmente en scripts de shell como parte de una ifdeclaración. Aquí, testse está utilizando para probar si el número de puerto es 42.

La Matchpalabra clave ssh_config se agregó a OpenSSH en la versión 6.5 o 6.6. Consulte su ssh_configpágina de manual para ver si está disponible en su sistema.

Kenster
fuente
¡Oh wow! Eso es genial. Sin embargo, supongo que es bastante lento. Sin embargo, para una pequeña cantidad de configuración usando esto, probablemente no sea un gran problema si es un poco lento.
Ricky Cook
Dudo que la prueba tome una cantidad de tiempo apreciable en comparación con el apretón de manos ssh crypto.
studgeek
3

Puede crear "alias" de host en su ~/.ssh/configarchivo que hacen referencia a demonios SSH en diferentes puertos del mismo servidor. Por ejemplo:

Host daemon1
HostName host.domain.com
Port 22
IdentityFile ~/.ssh/id_rsa_daemon1

Host daemon2
HostName host.domain.com
Port 23
IdentityFile ~/.ssh/id_rsa_daemon2

Luego puede ejecutar ssh daemon1o ssh daemon2iniciar sesión en un demonio SSH particular.

jjlin
fuente
Sí, también tuve esa idea, pero debe ser transparente porque hay una gran cantidad de scripts de implementación que hacen referencia directa a los hosts (que, estoy de acuerdo, deberían parametrizarse pero ... sí)
Ricky Cook