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?
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.
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
.
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.