web-dev-qa-db-fra.com

Comment ssh aux serveurs interne par HostName sans nom de domaine?

Je dois me connecter à plusieurs serveurs au travail pour faire effectuer mon travail. Je suis fatigué de taper le FQDN d'un serveur pour accéder. Je vous connecte à SSH sur notre propre réseau privé. Je suis sûr que je suis sûr que c'est sur notre propre réseau privé B/C Tous les serveurs ont une adresse IP addr 10.x.y.z. Y a-t-il un moyen de ssh dans des serveurs avec juste le nom d'hôte et non 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 des tunnels carpiens en tapant ssh [email protected]

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

La solution que j'ai faite a été configurée un alias dans mon fichier ~/.ssh/config pour certains des serveurs. Cependant, je ne pense pas que ce soit réalisable d'ajouter 1000 serveurs dans ce fichier. J'ai déjà ajouté plus de 20 serveurs et mes collègues pensent que je suis fou, même si je pense qu'ils sont fous de taper le FQDN lors de l'assignation.

Y a-t-il un moyen facile pour nous de configurer quelque chose de manière à ne pas avoir à taper dans notre domaineName.com à chaque fois?

10
Classified

Vous pouvez utiliser des caractères génériques et utiliser %h Dans votre configuration

par exemple

Host *.eng
  Hostname %h.domainname.com

Maintenant, quand vous faites ssh foo.eng cela va essayer 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, quand vous faites ssh foo.eng cela va essayer de se connecter à foo.eng.domainname.com comme 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.

18
Stephen Harris

Si vous ajoutez

search domainname.com

à /etc/resolv.conf, et utilisez hostname.country, ssh (et d'autres programmes de réseau, pour cette affaire) ajoutera automatiquement domainname.com pour vous1.

Je ne pense pas ajouter que l'ajout des différents domaines de pays à votre search path est 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 vaut mieux que la modification de la configuration ssh car cela permet à hostname.country De résoudre indépendamment du programme que vous utilisez (telnet, VNC, ...).

Voir resolv.conf(5)


1 Plus précisément, il appendra domainname.com S'il ne peut pas résoudre hostname.country Par lui-même.

2 Dans un tel scénario hostname va résoudre le serveur du pays dont le domaine est répertorié d'abord dans le chemin search.

9
Joseph R.

Vous pouvez utiliser l'option CanonicalDomains dans votre configuration SSH.

L'ajout de ce qui suit à votre fichier de configuration SSH rendra SSH essayer d'appendre domainname.com à n'importe quel hôte qui a au maximum 1 point dans son nom:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Avec cette config ssh foo.eng va d'abord essayer foo.eng.domainname.com et retomber à foo.eng Si l'hôte est introuvable. De même, ssh github.com va d'abord essayer github.com.domainname.com, donc si vous souhaitez vous connecter à Github, votre serveur DNS ne doit pas renvoyer des enregistrements pour les hôtes non existants.

Le CanonicalizeMaxDots peut être utilisé pour contrôler le nombre de points pouvant apparaître dans le nom d'hôte avant que SSH considère qu'il soit pleinement qualifié et n'applend pas domainname.com. Il est par défaut à 1 qui devrait être suffisant pour vous donner le schéma que vous avez actuellement, mais si vous arrivez à quelque chose comme hostname.city.country vous auriez besoin de l'augmenter.

7
user2313067