Comment ssh vers des serveurs en interne par nom d'hôte sans nom de domaine?

10

Je dois me connecter à plusieurs serveurs au travail pour faire mon travail. J'en ai assez de taper le nom de domaine complet d'un serveur auquel accéder. Je me connecte / me déconnecte via ssh sur notre propre réseau privé. Je suis sûr à 99% que c'est sur notre propre réseau privé b / c tous les serveurs ont ip addr 10.xyz Y a-t-il un moyen de ssh dans les serveurs avec juste le nom d'hôte et pas le nom de domaine?

Nous avons des serveurs dans plusieurs pays. La façon dont nos serveurs sont nommés est très longue. Il est nommé comme suit:

hostname.country.domainname.com

Je reçois du tunnel carpien en train de taper ssh [email protected]

... chaque fois que j'accède à l'un de nos serveurs. Si je suis aux États-Unis et que j'essaie d'accéder à un autre hôte aux États-Unis, je peux simplement taper ssh me@hostname2et je me connecte bien. Cependant, si je suis aux États-Unis et que j'essaie de me connecter à un serveur en Angleterre, je ne peux pas taper ssh [email protected]et me connecter hostname3.

La solution de contournement que j'ai faite a été de configurer un alias dans mon fichier ~ / .ssh / config pour certains des serveurs. Cependant, je ne pense pas qu'il soit possible d'ajouter plus de 1000 serveurs dans ce fichier. J'ai déjà ajouté plus de 20 serveurs et mes collègues pensent que je suis fou, bien que je pense qu'ils sont fous de taper le FQDN lors de la navigation.

Existe-t-il un moyen facile pour nous de configurer quelque chose afin que nous n'ayons pas à taper notre nom de domaine.com à chaque fois?

Classifié
la source

Réponses:

18

Vous pouvez utiliser des caractères génériques et les utiliser %hdans votre configuration

par exemple

Host *.eng
  Hostname %h.domainname.com

Maintenant, lorsque vous le ferez, ssh foo.engil essaiera de se connecter foo.eng.domainname.com.

Vous pouvez également ajouter d'autres options à cette configuration; par exemple, forcer le nom d'utilisateur

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

Maintenant, lorsque vous le ferez, ssh foo.engil essaiera de se connecter en foo.eng.domainname.comtant qu'utilisateur me.

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

(eh bien, évidemment, je reçois une erreur avant que ce ne soit pas un nom d'hôte valide pour moi!)

Alors maintenant, vous n'avez besoin que d'une règle par pays.

Stephen Harris
la source
Ma première pensée a été les alias DNS, la seconde était le fichier hosts, mais j'ai manqué qu'il y ait plusieurs serveurs. Cette solution semble excellente. Quelle configuration obtient la ou les lignes que vous avez publiées?
Xalorous
Cela va dans $HOME/.ssh/configou vous pouvez le faire dans tout le système/etc/ssh/ssh_config
Stephen Harris
Ça marche avec user@*.eng?
Xalorous
3
Avec la règle que j'ai écrite, vous pouvez le faire ssh [email protected]et cela fonctionnera comme prévu. Tout cela ne fait que réécrire le composant hostname. Il va même travailler avec scpet sftpet ainsi de suite.
Stephen Harris
9

Si vous ajoutez

search domainname.com

à /etc/resolv.conf, et utiliser hostname.country, ssh(et d'autres programmes réseau, d'ailleurs) s'ajoutera automatiquement domainname.compour vous 1 .

Je ne pense pas que l'ajout des différents domaines de pays à votre searchchemin soit une bonne idée car vous pouvez obtenir un comportement inattendu si deux serveurs dans deux pays différents partagent le même nom d'hôte 2

Je crois que cette méthode est meilleure que de changer la sshconfiguration car cela permet hostname.countryde résoudre quel que soit le programme que vous utilisez ( telnet, VNC, ...).

Voir resolv.conf(5)


1 Plus précisément, il s'ajoutera domainname.coms'il ne peut pas se résoudre tout hostname.countryseul.

2 Dans un tel scénario, il hostnamesera résolu sur le serveur du pays dont le domaine est répertorié en premier dans le searchchemin.

Joseph R.
la source
2
BTW vous pouvez également le faire en tant que non root et par processus par la variable env LOCALDOMAIN. man resolv.conf
rudimeier
Cela fonctionne pour résoudre l'hôte SSH, mais si vous utilisez GSS / Kerberos, les noms ne correspondront pas et l'authentification échouera.
Nick T
7

Vous pouvez utiliser l' CanonicalDomainsoption dans votre configuration ssh.

L'ajout de ce qui suit à votre fichier de configuration ssh fera essayer à ssh de l'ajouter domainname.comà tout hôte ayant au plus 1 point dans son nom:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Avec cette configuration ssh foo.engva d' abord essayer foo.eng.domainname.comet à fallback foo.engsi l'hôte ne peut pas être trouvé. De même, ssh github.comessaiera d'abord github.com.domainname.com, donc si vous souhaitez vous connecter à GitHub, votre serveur DNS ne doit pas renvoyer d'enregistrements pour des hôtes non existants.

Le CanonicalizeMaxDotspeut être utilisé pour contrôler le nombre de points pouvant apparaître dans le nom d'hôte avant que ssh ne le considère comme entièrement qualifié et ne s'ajoute pas domainname.com. il vaut 1 par défaut, ce qui devrait vous suffire compte tenu du schéma que vous avez actuellement, mais si vous arrivez à quelque chose comme cela, hostname.city.countryvous devrez l'augmenter.

user2313067
la source