¿Puedo configurar ubuntu para agregar un dominio al final de una solicitud de nombre de host ssh?


9

Tengo muchos servidores y todos terminan con los mismos servidores.company.net, así que, por ejemplo, vded-xx-001.servers.company.net, y me preguntaba si es posible hacerlo, así que simplemente puedo escribir el vded- xx-001 y hacer que agregue los servidores.company.net automáticamente?

Entonces me gustaría escribir

ssh user@vded-xx-001

y que realmente se conecte a

ssh user@vded-xx-001.servers.company.net

Intenté configurar mi dominio de búsqueda de DNS en server.company.net, en / etc / network / interfaces, pero esto no logró el resultado deseado.

¿Alguien capaz de señalarme en la dirección correcta?

Gracias por adelantado


¿Hay alguna razón por la que no pueda simplemente agregar search company.neta /etc/resolv.conf?
Hennes

@ Hennes Agregar búsqueda company.net y server.company.net a resolv.conf ha funcionado. Sin embargo, hay una advertencia en la parte superior del archivo de que mis cambios se sobrescribirán. Si este es el caso, ¿cómo los hago permanentes?
Tim Lassie Freeborn

1
Me encantaría responder eso y obtener el representante extra, pero esta publicación ya responde bastante bien: :-) askubuntu.com/questions/157154/…
Hennes

En realidad, al contrario de lo que se analiza en esa pregunta, normalmente es mejor incluir una lista de dominios de búsqueda en /etc/network/interfaces(usando una dns-searchopción) o en el campo de configuración de conexión de NetworkManager Search domains.
jdthood

En lugar de meterse con la configuración de resolución local, esta solución es más simple y portátil.
OrangeDog

Respuestas:


19

Probablemente ya haya resuelto esto, pero tal vez más tarde podría ayudar a alguien: no necesita mees con su resolv.conf, solo puede usar algo como esto en su ~ / .ssh / config:

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

Entonces más tarde puedes usar:

ssh vdev-alotofstuff-001
ssh vdev-somethingels-001
ssh test-02-something-fixed-somethingelse

Saludos,


Esta debería ser la respuesta aceptada.
slm

Esta es una forma de resolver el problema, pero no resuelve el problema de la resolución de nombres en todo el sistema, solo resuelve el problema de los nombres de host ssh. La mejor práctica para mí es poder obtener el nombre de host correcto en todo el sistema y no tener que personalizar un servicio en particular (ssh) para poder resolver nombres de host particulares
Philippe Gachoud

1
En caso de que lo olvide y vuelva a buscar esto más tarde, si desea permitir nombres cortos y largos mientras comparte la misma configuración, simplemente especifique una primera entrada Host vded-*.servers.company.net, con Hostname %h. Luego, en una segunda entrada Host vded-*con Hostname %h.servers.company.nety todos los demás parámetros como Usuario, IdentityFile, etc.
bksunday

6

Esta es la solución más fácil. Funciona para todos los hosts, no requiere root ni acceso a ningún sistema DNS / resolutor.

Agregue a la parte superior de su ~/.ssh/configarchivo (o cree si aún no existe):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Documentación ( man 5 ssh_config):

CanonicalizeHostname

Controla si se realiza la canonicalización explícita del nombre de host. El valor predeterminado, no , es no realizar ninguna reescritura de nombres y dejar que el solucionador del sistema maneje todas las búsquedas de nombres de host. Si se establece en y luego, para las conexiones que no utilizan un ProxyCommand , ssh intentará canonicalize el nombre de host especificado en la línea de comandos usando los CanonicalDomains sufijos y CanonicalizePermittedCNAMEs reglas. Si CanonicalizeHostname está configurado para siempre , la canonicalización también se aplica a las conexiones proxy.

Si esta opción está habilitada, los archivos de configuración se procesan nuevamente utilizando el nuevo nombre de destino para elegir cualquier nueva configuración en las secciones Host y Match coincidentes .


Funciona mejor para mi. No tiene que agregar CanonicalDomains, solo la primera fila. De esta manera funciona incluso si se conecta a otras redes.
Adam Wallner

2
@AdamWallner si no agrega CanonicalDomains, solo funcionará en el dominio de búsqueda de la red actual. Si lo hace (y puede enumerar varios), funcionará para resolver todos esos nombres de host, en cualquier red a la que pueda conectarse.
OrangeDog

2

Sí, puede hacer esto creando un archivo de configuración llamado ~/.ssh/confige ingresando los siguientes contenidos:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

Ahora solo tiene que escribir esto (ya ni siquiera necesita el nombre de usuario):

$ ssh vded-xx-001

Esto también funciona con la utilidad de línea de comandos scp:

$ scp filename vded-xx-001:/path/

Soy consciente de que esto funciona para hosts individuales, pero tengo cientos y esperaba poder crear una regla que se base en VDED- * y luego para el nombre de host host.servers.company.net
Tim Lassie Freeborn

1
@TimLassieFreeborn: puede escribir un script que genere las entradas necesarias para el archivo de configuración. Sin embargo, no sé si puedes hacerlo dinámicamente.
Flimm

@TimLassieFreeborn ver mi respuesta
OrangeDog

2

La solución a mi problema fue agregar el dominio de búsqueda a resolv.conf:

search servers.company.net

Esto me ha permitido entrar

ssh user@vded-xx-001

para cualquiera de mis servidores y se conecta a la dirección correcta.

Gracias @Hennes por la respuesta


2
Suponiendo que está ejecutando Ubuntu 12.04 o posterior, no debe editar /etc/resolv.conf directamente porque la utilidad resolvconf genera ese archivo. (En realidad, genera /run/resolvconf/resolv.conf para el cual /etc/resolv.conf es un enlace simbólico). En su lugar, debe configurar los ajustes de DNS a través del configurador de interfaz, ya sea ifup o NetworkManager. Ifup : Edite / etc / network / interfaces y agregue una dns-search servers.company.netlínea a la sección para la interfaz de red externa de la máquina. NM : agregue servers.company.netal Search domainscampo en la pestaña IPv4 para la conexión.
jdthood

Si /etc/resolv.confno hay un enlace simbólico ../run/resolvconf/resolv.confen su máquina, ejecute sudo dpkg-reconfigure resolvconfpara restaurar el enlace simbólico.
jdthood

1

Si está utilizando identidades SSH, y con tantos servidores que vale la pena ver, entonces, como dijo OrangeDog, la configuración de CanonicaliseHostname y CanonicaliseDomains también permitirá una coincidencia con una entrada @ cert-Authority en sus hosts conocidos

entrada conocida_hosts @ cert-Authority * .example.com ssh-rsa AAAddadfkjaeio ...

sin las opciones de Canonicalise, necesitaría usar "ssh host.example.com"

Con las opciones de Canonicalise, "ssh myhost" coincidirá.

Hubiera agregado esto como un comentario a la respuesta de OrangeDogs si el representante lo permitiera ...


0

Para una solución rápida que funcione en diferentes programas, también puede configurar el dominio vded-xx-001para que se redirija a una dirección IP específica, editando /etc/hostspara incluir una línea como esta:

173.194.41.90  vded-xx-001

Esto funciona en su navegador: http://vded-xx-001/

Además de las utilidades de línea de comandos como SSH:

$ ssh user@vded-xx-001

(Sin embargo, personalmente prefiero la solución de configuración SSH ).


0

Para la resolución de nombres de dominio en todo el sistema, me gusta configurar las cosas una vez en mi red. Así que configuré en el servidor DHCP el nombre de dominio y el servidor DNS para que le dé a todas las máquinas el derecho resolv.confincluido

  • IP del servidor DNS primario
  • Dominio
  • directiva de búsqueda

Esto depende del servidor DHCP y la configuración de red que desee ... Personalmente no me gusta la configuración personalizada de la máquina cuando es algo general para la red

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.