Puis-je configurer ubuntu pour ajouter un domaine à la fin d'une demande de nom d'hôte ssh?


9

J'ai de nombreux serveurs et ils se terminent tous par les mêmes serveurs.company.net, donc par exemple vded-xx-001.servers.company.net, et je me demandais s'il était possible de le faire pour que je puisse simplement taper le vded- xx-001 et l'ajouter automatiquement à servers.company.net?

Je voudrais donc taper

ssh user@vded-xx-001

et le connecter réellement à

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

J'ai essayé de définir mon domaine de recherche DNS sur servers.company.net, dans / etc / network / interfaces, mais cela n'a pas atteint le résultat souhaité.

Quelqu'un peut-il m'orienter dans la bonne direction?

Merci d'avance


Y a-t-il une raison pour laquelle vous ne pouvez pas simplement ajouter search company.netà /etc/resolv.conf?
Hennes

@Hennes L'ajout de search company.net et servers.company.net à resolv.conf a fonctionné. Cependant, il y a un avertissement en haut du fichier que mes modifications seront écrasées, si c'est le cas, comment les rendre permanentes?
Tim Lassie Freeborn

1
J'aimerais répondre à cela et ratisser le représentant supplémentaire, mais ce post y répond déjà très bien: :-) askubuntu.com/questions/157154/…
Hennes

En fait, contrairement à ce qui est discuté dans cette question, il est normalement préférable d'inclure une liste de domaines de recherche dans /etc/network/interfaces(à l'aide d'une dns-searchoption) ou dans le champ de configuration de la connexion NetworkManager Search domains.
jdthood

Plutôt que de jouer avec la configuration du résolveur local, cette solution est plus simple et portable.
OrangeDog

Réponses:


19

Vous avez probablement déjà résolu cela, mais peut-être plus tard, cela pourrait aider quelqu'un: vous n'avez pas besoin de mees avec votre resolv.conf, vous pouvez simplement utiliser quelque chose comme ça dans votre ~ / .ssh / config:

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

Donc, plus tard, vous pouvez simplement utiliser:

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

Cordialement,


Ce devrait être la réponse acceptée.
slm

C'est un moyen de résoudre le problème, mais ne résout pas le problème de la résolution de noms à l'échelle du système, il ne résout que le problème des noms d'hôte ssh. La meilleure pratique pour moi est de pouvoir obtenir le bon nom d'hôte à l'échelle du système et de ne pas avoir à personnaliser un service particulier (ssh) pour pouvoir résoudre des noms d'hôtes particuliers
Philippe Gachoud

1
Juste au cas où j'oublierais et reverrais cela plus tard, si vous voulez autoriser les noms courts et longs tout en partageant la même configuration, spécifiez simplement une 1ère entrée Host vded-*.servers.company.net, avec Hostname %h. Puis dans une 2ème entrée Host vded-*avec Hostname %h.servers.company.netet tous les autres paramètres tels que User, IdentityFile, etc.
bksunday

6

C'est la solution la plus simple. Il fonctionne pour tous les hôtes, ne nécessite ni racine ni accès à aucun système DNS / résolveur.

Ajoutez en haut de votre ~/.ssh/configfichier (ou créez s'il n'existe pas déjà):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Documentation ( man 5 ssh_config):

CanonicalizeHostname

Contrôle si la canonisation explicite du nom d'hôte est effectuée. La valeur par défaut, non , n'est pas d'effectuer une réécriture de nom et de laisser le résolveur système gérer toutes les recherches de nom d'hôte. Si la valeur oui alors, pour les connexions qui n'utilisent pas ProxyCommand , ssh tentera de canoniser le nom d' hôte spécifié sur la ligne de commande en utilisant les CanonicalDomains suffixes et CanonicalizePermittedCNAMEs règles. Si CanonicalizeHostname est toujours défini , la canonisation est également appliquée aux connexions proxy.

Si cette option est activée, les fichiers de configuration sont à nouveau traités en utilisant le nouveau nom cible pour récupérer toute nouvelle configuration dans les strophes Host et Match correspondantes .


Cela fonctionne mieux pour moi. Vous n'avez pas besoin d'ajouter CanonicalDomains, juste la 1ère ligne. De cette façon, cela fonctionne même si vous vous connectez à d'autres réseaux.
Adam Wallner

2
@AdamWallner si vous n'ajoutez pas, CanonicalDomainscela ne fonctionnera que sur le domaine de recherche du réseau actuel. Si vous le faites (et vous pouvez en répertorier plusieurs), cela fonctionnera pour résoudre tous ces noms d'hôte, sur n'importe quel réseau auquel vous pourriez vous connecter.
OrangeDog

Ce n'est pas assez bon pour moi. J'espérais que le nom de domaine réécrit, par exemple, foo allant à foo.bar.baz, entraînerait alors la correspondance de la foo.bar.bazrègle des hôtes. Cependant, malgré la présence d'une règle Host * .bar.baz et la réécriture de l'invite SSH de ssh fooà ssh foo.bar.baz, elle ne correspond pas.
deed02392 il y a

@ deed02392 c'est exactement ce qu'il fait, comme le dit la documentation.
OrangeDog Il y a

J'ai vu les documents après l'avoir essayé mais je n'ai pas vu de problème avec ma configuration. J'ai utilisé ces deux lignes en haut de ma configuration et j'ai eu une correspondance hôte comme je l'ai décrit, mais l'utilisateur n'a pas changé comme je le voulais. Peut-être que ssh_client sur MacOS se comporte différemment.
deed02392 il y a

2

Oui, vous pouvez le faire en créant un fichier de configuration nommé ~/.ssh/configet en entrant le contenu suivant:

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

Il ne vous reste plus qu'à taper ceci (vous n'avez même plus besoin du nom d'utilisateur):

$ ssh vded-xx-001

Cela fonctionne également avec l'utilitaire de ligne de commande scp:

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

1
Je suis conscient que cela fonctionne pour des hôtes individuels mais j'en ai des centaines et j'espérais pouvoir créer une règle qui reprend sur VDED- *, puis pour le nom d'hôte, host.servers.company.net
Tim Lassie Freeborn

1
@TimLassieFreeborn: vous pouvez écrire un script qui génère les entrées nécessaires pour le fichier de configuration. Je ne sais pas si vous pouvez le faire dynamiquement, cependant.
Flimm

@TimLassieFreeborn voir ma réponse
OrangeDog

2

La solution à mon problème était d'ajouter le domaine de recherche à resolv.conf:

search servers.company.net

Cela m'a permis d'entrer

ssh user@vded-xx-001

pour l'un de mes serveurs et il se connecte à la bonne adresse.

Merci @Hennes pour la réponse


2
En supposant que vous exécutez Ubuntu 12.04 ou une version ultérieure, vous ne devez pas modifier /etc/resolv.conf directement car l'utilitaire resolvconf génère ce fichier. (En fait, il génère /run/resolvconf/resolv.conf vers lequel /etc/resolv.conf est un lien symbolique.) À la place, vous devez configurer les paramètres DNS via le configurateur d'interface, ifup ou NetworkManager. Ifup : Modifiez / etc / network / interfaces et ajoutez une dns-search servers.company.netligne à la strophe pour l'interface réseau externe de la machine. NM : ajouter servers.company.netau Search domainschamp sous l'onglet IPv4 pour la connexion.
jdthood

S'il /etc/resolv.confne s'agit pas d'un lien symbolique vers ../run/resolvconf/resolv.confvotre ordinateur, exécutez-le sudo dpkg-reconfigure resolvconfpour restaurer le lien symbolique.
jdthood

1

Si vous utilisez des identités SSH - et avec autant de serveurs que cela vaut la peine d'être examiné -, comme OrangeDog l'a dit, la définition de CanonicaliseHostname et CanonicaliseDomains permettra également une correspondance avec une entrée @ cert-Authority dans vos hôtes connus

entrée_hôtes connus @ cert-Authority * .example.com ssh-rsa AAAddadfkjaeio ...

sans les options Canonicalise, vous devez utiliser "ssh host.example.com"

Avec les options Canonicalise, "ssh myhost" correspondra.

J'aurais ajouté cela en tant que commentaire à la réponse d'OrangeDogs si le représentant le permettait ...


0

Pour une solution rapide qui fonctionne sur différents programmes, vous pouvez également définir le domaine vded-xx-001pour rediriger vers une adresse IP spécifique, en modifiant /etc/hostspour inclure une ligne comme celle-ci:

173.194.41.90  vded-xx-001

Cela fonctionne dans votre navigateur: http://vded-xx-001/

Ainsi qu'avec les utilitaires de ligne de commande comme SSH:

$ ssh user@vded-xx-001

(Je préfère personnellement la solution de configuration SSH .)


0

Pour la résolution des noms de domaine à l'échelle du système, j'aime définir les choses une seule fois dans mon réseau. Donc, je définirais dans le serveur DHCP le nom de domaine et le serveur DNS afin qu'il donne à toutes les machines le droit, resolv.confy compris

  • IP du serveur DNS principal
  • Domaine
  • directive de recherche

Cela dépend du serveur DHCP et de la configuration réseau que vous souhaitez ... Personnellement, je n'aime pas la configuration personnalisée de la machine lorsque c'est quelque chose de général pour le réseau

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.