¿Cómo ssh a servidores internamente por nombre de host sin nombre de dominio?

10

Necesito iniciar sesión en varios servidores en el trabajo para hacer mi trabajo. Me estoy cansando de escribir el FQDN de un servidor para acceder. Me conecto / desconecto a través de ssh en nuestra propia red privada. Estoy 99% seguro de que está en nuestra propia red privada porque todos los servidores tienen ip addr 10.xyz ¿Hay alguna manera de ingresar a los servidores con solo el nombre de host y no el nombre de dominio?

Tenemos servidores en varios países. La forma en que se nombran nuestros servidores es muy larga. Se nombra de la siguiente manera:

hostname.country.domainname.com

Estoy recibiendo el túnel carpiano escribiendo ssh [email protected]

... cada vez que accedo a uno de nuestros servidores. Si estoy en los EE. UU. Y trato de acceder a otro host que está en los EE. UU., Solo puedo escribir ssh me@hostname2y me conecto bien. Sin embargo, si estoy en los EE. UU. E intento conectarme a un servidor en Inglaterra, no puedo escribir ssh [email protected]ni conectarme a él hostname3.

La solución que hice fue configurar un alias en mi archivo ~ / .ssh / config para algunos de los servidores. Sin embargo, no creo que sea factible agregar más de 1000 servidores en ese archivo. Ya agregué más de 20 servidores y mis compañeros de trabajo piensan que estoy loco, aunque creo que están locos por escribir el FQDN cuando están jugando.

¿Hay alguna manera fácil de configurar algo para que no tengamos que escribir nuestro domainname.com cada vez?

Clasificado
fuente

Respuestas:

18

Puedes usar comodines y usarlos %hen tu configuración

p.ej

Host *.eng
  Hostname %h.domainname.com

Ahora, cuando lo hagas ssh foo.eng, intentará conectarte foo.eng.domainname.com.

También puede agregar otras opciones a esta configuración; por ejemplo, forzar el nombre de usuario

Host *.eng
  Hostname %h.domainname.com
  User me

Ahora, cuando lo haga ssh foo.eng, intentará conectarse foo.eng.domainname.comcomo usuario me.

% ssh foo.eng
ssh: Could not resolve hostname foo.eng.domainname.com: Name or service not known

(bueno, obviamente recibo un error antes de que no sea un nombre de host válido para mí)

Entonces ahora solo necesita una regla por país.

Stephen Harris
fuente
Mi primer pensamiento fueron los alias de DNS, el segundo fue el archivo de hosts, pero extrañé que haya varios servidores. Esta solución se ve excelente. ¿Qué configuración obtiene las líneas que has publicado?
Xalorous
Esto entra $HOME/.ssh/configo puedes hacerlo en todo el sistema/etc/ssh/ssh_config
Stephen Harris
¿Funciona con user@*.eng?
Xalorous
3
Con la regla que escribí puedes hacer ssh [email protected]y funcionará como se esperaba. Todo lo que hace es reescribir el componente del nombre de host. Incluso te permite trabajar con scpy sftpy así sucesivamente.
Stephen Harris
9

Si agregas

search domainname.com

a /etc/resolv.conf, y usar hostname.country, ssh(y otros programas de red, para el caso) se agregarán automáticamente domainname.compara usted 1 .

No creo que searchsea ​​una buena idea agregar dominios de país diferentes a su ruta porque puede tener un comportamiento inesperado si dos servidores en dos países diferentes comparten el mismo nombre de host 2

Creo que este método es mejor que cambiar la sshconfiguración porque permite hostname.countryresolverlo independientemente del programa que esté utilizando ( telnet, VNC, ...).

Ver resolv.conf(5)


1 Más exactamente, se agregará domainname.comsi no se puede resolver hostname.countrypor sí solo.

2 En tal escenario, hostnamese resolverá en el servidor del país cuyo dominio aparece primero en la searchruta.

Joseph R.
fuente
2
Por cierto, también puede hacer esto como no raíz y por proceso mediante la variable env LOCALDOMAIN. man resolv.conf
rudimeier
Esto funciona para resolver el host SSH, pero si está utilizando GSS / Kerberos, los nombres no coincidirán y la autenticación fallará.
Nick T
7

Puede usar la CanonicalDomainsopción en su configuración ssh.

Agregar lo siguiente a su archivo de configuración ssh hará que ssh intente agregar domainname.coma cualquier host que tenga como máximo 1 punto en su nombre:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Con esta configuración ssh foo.eng, primero lo intentará foo.eng.domainname.comy recurrirá a foo.engsi no se puede encontrar el host. Del mismo modo, ssh github.comprimero lo intentaremos github.com.domainname.com, por lo que si desea conectarse a GitHub, su servidor DNS no debería devolver registros de hosts no existentes.

Se CanonicalizeMaxDotspuede usar para controlar cuántos puntos pueden aparecer en el nombre de host antes de que ssh lo considere totalmente calificado y no se agregue domainname.com. el valor predeterminado es 1, que debería ser suficiente para usted dado el esquema que tiene actualmente, pero si alguna vez llega a algo así hostname.city.country, necesitaría aumentarlo.

usuario2313067
fuente