Wie ssh zu Servern intern nach Hostname ohne Domainnamen?

10

Ich muss mich bei der Arbeit bei mehreren Servern anmelden, um meine Arbeit erledigen zu können. Ich habe es satt, den FQDN eines Servers einzugeben, auf den zugegriffen werden soll. Ich logge mich über ssh in unserem eigenen privaten Netzwerk ein / aus. Ich bin zu 99% sicher, dass es sich in unserem eigenen privaten Netzwerk befindet. Alle Server haben die IP-Adresse 10.xyz. Gibt es eine Möglichkeit, auf Server mit nur dem Hostnamen und nicht mit dem Domänennamen zu ssh?

Wir haben Server in mehreren Ländern. Die Art und Weise, wie unsere Server benannt werden, ist sehr lang. Es heißt wie folgt:

hostname.country.domainname.com

Ich bekomme Karpaltunnel tippen ssh [email protected]

... jedes Mal, wenn ich auf einen unserer Server zugreife. Wenn ich in den USA bin und versuche, auf einen anderen Host in den USA zuzugreifen, kann ich einfach tippen ssh me@hostname2und eine gute Verbindung herstellen. Wenn ich jedoch in den USA bin und versuche, eine Verbindung zu einem Server in England herzustellen, kann ich nicht tippen ssh [email protected]und eine Verbindung herstellen hostname3.

Die Problemumgehung bestand darin, einen Alias ​​in meiner Datei ~ / .ssh / config für einige der Server einzurichten. Ich halte es jedoch nicht für möglich, dieser Datei mehr als 1000 Server hinzuzufügen. Ich habe bereits mehr als 20 Server hinzugefügt und meine Kollegen halten mich für verrückt, obwohl ich denke, dass sie verrückt sind, wenn sie den FQDN beim Herumtippen eingeben.

Gibt es eine einfache Möglichkeit für uns, etwas einzurichten, damit wir nicht jedes Mal unseren Domainnamen.com eingeben müssen?

Klassifiziert
quelle

Antworten:

17

Sie können Platzhalter verwenden und %hin Ihrer Konfiguration verwenden

z.B

Host *.eng
  Hostname %h.domainname.com

Wenn Sie dies tun ssh foo.eng, wird versucht, eine Verbindung herzustellen foo.eng.domainname.com.

Sie können dieser Konfiguration auch andere Optionen hinzufügen. zB den Benutzernamen erzwingen

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

Wenn Sie dies tun ssh foo.eng, wird versucht, eine Verbindung foo.eng.domainname.comals Benutzer herzustellen me.

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

(Nun, offensichtlich bekomme ich eine Fehlermeldung, bevor es kein gültiger Hostname für mich ist!)

Jetzt brauchen Sie nur noch eine Regel pro Land.

Stephen Harris
quelle
Mein erster Gedanke war DNS-Aliase, der zweite war Hosts-Datei, aber ich habe vermisst, dass es mehrere Server gibt. Diese Lösung sieht hervorragend aus. Welche Konfiguration erhält die von Ihnen geposteten Zeilen?
Xalorous
Dies geht in $HOME/.ssh/configoder Sie können es systemweit machen in/etc/ssh/ssh_config
Stephen Harris
Funktioniert es mit user@*.eng?
Xalorous
3
Mit der Regel, die ich geschrieben habe, können Sie tun ssh [email protected]und es wird wie erwartet funktionieren. Dazu müssen Sie lediglich die Hostnamenkomponente neu schreiben. Es wird auch mit arbeiten scpund sftpund so weiter.
Stephen Harris
9

Wenn Sie hinzufügen

search domainname.com

zu /etc/resolv.confund die Nutzung hostname.country, ssh(und andere Netzwerk - Programme, für diese Angelegenheit) automatisch append domainname.comfür Sie 1 .

Ich halte es nicht für searcheine gute Idee , die verschiedenen Länderdomänen zu Ihrem Pfad hinzuzufügen, da Sie möglicherweise unerwartetes Verhalten erhalten, wenn zwei Server in zwei verschiedenen Ländern denselben Hostnamen 2 verwenden

Ich glaube, diese Methode ist besser als das Ändern der sshKonfiguration, da dies eine hostname.countryAuflösung unabhängig vom verwendeten Programm ( telnet, VNC, ...) ermöglicht.

Sehen resolv.conf(5)


1 Genauer gesagt wird es angehängt, domainname.comwenn es nicht hostname.countryvon selbst aufgelöst werden kann.

2 In einem solchen Szenario hostnamewird der Server in dem Land aufgelöst, dessen Domäne zuerst im searchPfad aufgeführt ist.

Joseph R.
quelle
2
Übrigens können Sie dies auch als Nicht-Root und pro Prozess mit der env-Variablen LOCALDOMAIN tun. man resolv.conf
Rudimeier
7

Sie können die CanonicalDomainsOption in Ihrer SSH-Konfiguration verwenden.

Wenn Sie Ihrer ssh-Konfigurationsdatei Folgendes hinzufügen, versucht ssh, domainname.coman jeden Host anzuhängen , dessen Name höchstens 1 Punkt enthält:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Mit dieser Konfiguration ssh foo.engwird zunächst versucht foo.eng.domainname.com, auf foo.engden Host zurückzugreifen , wenn dieser nicht gefunden werden kann. Ebenso ssh github.comwird zunächst versuchen github.com.domainname.com, wenn Sie also auf GitHub anschließen möchten, sollten Sie Ihre DNS - Server nicht zurückgeben Datensätze für nicht vorhandenen Hosts.

Mit CanonicalizeMaxDotskann gesteuert werden, wie viele Punkte im Hostnamen angezeigt werden können, bevor ssh ihn für vollständig qualifiziert hält und nicht anhängt domainname.com. Der Standardwert ist 1, was für Sie angesichts des aktuellen Schemas ausreichen sollte. Wenn Sie jedoch jemals zu so etwas kommen, müssen hostname.city.countrySie es erhöhen.

user2313067
quelle