Jak ssh do serwerów wewnętrznie według nazwy hosta bez nazwy domeny?


10

Muszę zalogować się do wielu serwerów w pracy, aby wykonać swoją pracę. Mam już dość wpisywania nazwy FQDN serwera, aby uzyskać dostęp. Loguję się / wylogowuję przez ssh w naszej prywatnej sieci. Jestem 99% pewien, że jest w naszej prywatnej sieci b / c wszystkie serwery mają adres IP addr 10.xyz Czy istnieje sposób na ssh na serwery z samą nazwą hosta, a nie nazwą domeny?

Mamy serwery w wielu krajach. Nazwa naszych serwerów jest bardzo długa. Nazwa jest następująca:

hostname.country.domainname.com

Dostaję wpisywanie tunelu nadgarstka ssh me@hostname1.country.domainname.com

... za każdym razem, gdy uzyskuję dostęp do jednego z naszych serwerów. Jeśli jestem w USA i próbuję uzyskać dostęp do innego hosta w USA, mogę po prostu pisać ssh me@hostname2i łączyć się poprawnie. Jednak jeśli jestem w USA i próbuję połączyć się z serwerem w Anglii, nie mogę pisać ssh me@hostname3.engi łączyć się z hostname3.

Obejściem tego problemu było ustawienie aliasu w moim pliku ~ / .ssh / config dla niektórych serwerów. Jednak nie sądzę, aby dodanie ponad 1000 serwerów do tego pliku było wykonalne. Dodałem już ponad 20 serwerów i moi współpracownicy myślą, że oszalałem, chociaż myślę, że oszaleli na punkcie wpisywania nazwy FQDN podczas sshingowania.

Czy istnieje prosty sposób, aby skonfigurować coś, abyśmy nie musieli wpisywać nazwy domeny.com za każdym razem?

Odpowiedzi:


18

Możesz używać symboli wieloznacznych i używać ich %hw konfiguracji

na przykład

Host *.eng
  Hostname %h.domainname.com

Teraz, gdy to zrobisz ssh foo.eng, spróbujesz się połączyć foo.eng.domainname.com.

Możesz także dodać inne opcje do tej konfiguracji; np. wymuszanie nazwy użytkownika

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

Teraz, gdy to zrobisz ssh foo.eng, spróbujesz połączyć się foo.eng.domainname.comjako użytkownik me.

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

(cóż, oczywiście otrzymuję błąd, zanim nie będzie to dla mnie poprawna nazwa hosta!)

Więc teraz potrzebujesz tylko jednej reguły na kraj.


Moja pierwsza myśl to aliasy DNS, druga to plik hosts, ale brakowało mi, że istnieje wiele serwerów. To rozwiązanie wygląda doskonale. Jaka konfiguracja pobiera opublikowane linie?
Xalorous

To wchodzi w grę $HOME/.ssh/configlub możesz zrobić to /etc/ssh/ssh_config
Stephen Harris

Czy to działa user@*.eng?
Xalorous

3
Z regułą, którą napisałem, możesz zrobić ssh foobar@somewhere.engi będzie działać zgodnie z oczekiwaniami. Wszystko to polega na przepisaniu komponentu nazwy hosta. To będzie jeszcze pracować scp, a sftpi tak dalej.
Stephen Harris

9

Jeśli dodasz

search domainname.com

do /etc/resolv.confi użytkowania hostname.country, ssh(i inne programy sieciowe, dla tej sprawy) automatycznie doda domainname.comci 1 .

Nie sądzę, aby dodanie do searchścieżki różnych domen kraju było dobrym pomysłem, ponieważ może się pojawić nieoczekiwane zachowanie, jeśli dwa serwery w dwóch różnych krajach mają tę samą nazwę hosta 2

Uważam, że ta metoda jest lepsza niż zmiana sshkonfiguracji, ponieważ pozwala hostname.countryto rozwiązać niezależnie od używanego programu ( telnet, VNC, ...).

Widzieć resolv.conf(5)


1 Dokładniej, doda się, domainname.comjeśli nie będzie w stanie rozwiązać hostname.countrysamodzielnie.

2 W takim scenariuszu hostnamenastąpi rozwiązanie do serwera w kraju, którego domena jest wymieniona jako pierwsza na searchścieżce.


2
BTW, możesz to zrobić również jako użytkownik inny niż root i na proces za pomocą zmiennej env LOCALDOMAIN. man resolv.conf
rudimeier

Działa to w celu rozwiązania hosta SSH, ale jeśli używasz GSS / Kerberos, nazwy nie będą pasować, a authing zakończy się niepowodzeniem.
Nick T

7

Możesz użyć tej CanonicalDomainsopcji w swojej konfiguracji ssh.

Dodanie następującego pliku konfiguracyjnego ssh spowoduje, że ssh spróbuje dołączyć go domainname.comdo dowolnego hosta, który ma najwyżej 1 kropkę w nazwie:

CanonicalizeHostname yes
CanonicalDomains domainname.com

Z tą konfiguracją ssh foo.engnajpierw spróbuje foo.eng.domainname.comi cofnie się, foo.engjeśli nie będzie można znaleźć hosta. Podobnie, ssh github.comnajpierw spróbuje github.com.domainname.com, więc jeśli chcesz połączyć się z GitHub, twój serwer DNS nie powinien zwracać rekordów dla nieistniejących hostów.

CanonicalizeMaxDotsMogą być używane do kontrolowania ile kropki mogą pojawić się w nazwie hosta przed ssh uważa za w pełni wykwalifikowanych i nie append domainname.com. domyślnie wynosi 1, co powinno wystarczyć dla ciebie, biorąc pod uwagę obecny schemat, ale jeśli kiedykolwiek dojdziesz do czegoś takiego hostname.city.country, musisz go zwiększyć.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.