Czy mogę skonfigurować ubuntu, aby dołączał domenę na końcu żądania nazwy hosta ssh?

9

Mam wiele serwerów i wszystkie kończą się na tym samym server.company.net, więc na przykład vded-xx-001.servers.company.net, i zastanawiałem się, czy można to zrobić, aby móc po prostu wpisać vded- xx-001 i czy automatycznie dołącza serwery.firma.net?

Więc chciałbym pisać

ssh user@vded-xx-001

i niech faktycznie się połączy

ssh [email protected]

Próbowałem ustawić moją domenę wyszukiwania DNS na server.company.net, w / etc / network / interfaces, ale nie osiągnąłem pożądanego rezultatu.

Czy ktoś jest w stanie skierować mnie w dobrym kierunku?

Z góry dziękuję

Tim Lassie Freeborn
źródło
Czy jest jakiś powód, dla którego nie możesz po prostu dodać search company.netdo /etc/resolv.conf?
Hennes
@Hennes Działa dodawanie wyszukiwarki company.net i servers.company.net do resolv.conf. Jednak u góry pliku znajduje się ostrzeżenie, że moje zmiany zostaną zastąpione, jeśli tak, to w jaki sposób mogę je na stałe?
Tim Lassie Freeborn
1
Chciałbym odpowiedzieć na to pytanie i zebrać
Hennes
W rzeczywistości, w przeciwieństwie do tego, co omówiono w tym pytaniu, zwykle najlepiej dołączyć listę domen wyszukiwania albo w /etc/network/interfaces(za pomocą dns-searchopcji), albo w polu konfiguracji połączenia NetworkManager Search domains.
jdthood,
Zamiast zadzierać z konfiguracją lokalnego resolvera, to rozwiązanie jest prostsze i przenośne.
OrangeDog,

Odpowiedzi:

19

Prawdopodobnie już to rozwiązałeś, ale może później może komuś pomóc: nie musisz się z tym bawić resolv.conf, wystarczy użyć czegoś takiego ~/.ssh/config:

Host vded-*-001 test-*-something-fixed-*
        HostName %h.servers.company.net
        User someusername

Później możesz po prostu użyć:

ssh vded-alotofstuff-001
ssh vded-somethingels-001
ssh test-02-something-fixed-somethingelse
Mauricio
źródło
To powinna być zaakceptowana odpowiedź.
slm
Jest to sposób na rozwiązanie problemu, ale nie rozwiązuje problemu rozpoznawania nazw w całym systemie, rozwiązuje jedynie problem nazw hostów ssh. Najlepszą praktyką jest dla mnie możliwość uzyskania prawidłowej nazwy hosta w całym systemie bez konieczności dostosowywania konkretnej usługi (ssh) w celu rozwiązania określonych nazw hostów
Philippe Gachoud
1
Na wypadek, gdy zapomnę i sprawdzę to później, jeśli chcesz zezwolić zarówno na krótkie, jak i długie nazwy podczas udostępniania tej samej konfiguracji, po prostu podaj pierwszy wpis Host vded-*.servers.company.net, za pomocą Hostname %h. Następnie w drugim wpisie Host vded-*ze Hostname %h.servers.company.netwszystkimi innymi parametrami, takimi jak User, IdentityFile itp.
bksunday
6

To jest najłatwiejsze rozwiązanie. Działa na wszystkich hostach, nie wymaga rootowania ani dostępu do żadnego systemu DNS / resolvera.

Dodaj na górę ~/.ssh/configpliku (lub utwórz, jeśli jeszcze nie istnieje):

CanonicalizeHostname yes
CanonicalDomains servers.company.net

Dokumentacja ( man 5 ssh_config):

CanonicalizeHostname

Kontroluje, czy wykonywana jest jawna kanonizacja nazwy hosta. Domyślnie „ nie” nie wykonuje żadnego przepisywania nazw i pozwala systemowi tłumaczącemu obsłużyć wszystkie wyszukiwania nazw hostów. Jeśli zestaw do tak wtedy, dla połączeń, które nie korzystają z ProxyCommand , ssh będzie próbował kanonicznej nazwę hosta określoną w wierszu poleceń używając CanonicalDomains przyrostków i CanonicalizePermittedCNAMEs zasad. Jeśli CanonicalizeHostname jest ustawione na zawsze , wówczas kanonizacja jest stosowana również do połączeń proxy.

Jeśli ta opcja jest włączona, pliki konfiguracyjne są przetwarzane ponownie przy użyciu nowej nazwy docelowej w celu pobrania dowolnej nowej konfiguracji w pasujących sekcjach Host i Match .

OrangeDog
źródło
To działa najlepiej dla mnie. Nie musisz dodawać CanonicalDomains, tylko pierwszy rząd. W ten sposób działa, nawet jeśli łączysz się z innymi sieciami.
Adam Wallner,
2
@AdamWallner to nie dodajesz, CanonicalDomainsto będzie działać tylko w domenie wyszukiwania w bieżącej sieci. Jeśli to zrobisz (i możesz podać wiele), będzie to działać w celu rozwiązania wszystkich tych nazw hostów w dowolnej sieci, z którą możesz się połączyć.
OrangeDog,
@ deed02392 właśnie to robi, jak mówi dokumentacja.
OrangeDog
2

Tak, możesz to zrobić, tworząc plik konfiguracyjny o nazwie ~/.ssh/configi wprowadzając następującą zawartość:

Host vded-xx-001
User user
Port 22
HostName vded-xx-001.servers.company.net

Teraz wystarczy wpisać to (nawet nie potrzebujesz już nazwy użytkownika):

$ ssh vded-xx-001

Działa to również z narzędziem wiersza poleceń scp:

$ scp filename vded-xx-001:/path/
Flimm
źródło
1
Wiem, że to działa dla poszczególnych hostów, ale mam ich setki i miałem nadzieję, że uda mi się stworzyć regułę, która będzie odbierać na VDED- *, a następnie dla nazwy hosta robi host.servers.company.net
Tim Lassie Freeborn
1
@TimLassieFreeborn: możesz napisać skrypt, który generuje wpisy potrzebne do pliku konfiguracyjnego. Nie wiem jednak, czy możesz to zrobić dynamicznie.
Flimm 16.04.13
@TimLassieFreeborn zobacz moją odpowiedź
OrangeDog
2

Rozwiązaniem mojego problemu było dodanie domeny wyszukiwania do resolv.conf:

search servers.company.net

To pozwoliło mi wejść

ssh user@vded-xx-001

dla dowolnego z moich serwerów i łączy się z poprawnym adresem.

Dziękuję @Hennes za odpowiedź

Tim Lassie Freeborn
źródło
2
Zakładając, że korzystasz z systemu Ubuntu 12.04 lub nowszego, nie powinieneś edytować pliku /etc/resolv.conf bezpośrednio, ponieważ narzędzie resolvconf generuje ten plik. (W rzeczywistości generuje /run/resolvconf/resolv.conf, do którego /etc/resolv.conf jest dowiązaniem symbolicznym.) Zamiast tego należy skonfigurować ustawienia DNS za pomocą konfiguratora interfejsu, ifup lub NetworkManager. Ifup : Edytuj / etc / network / interfaces i dodaj dns-search servers.company.netwiersz do sekcji dla zewnętrznego interfejsu sieciowego urządzenia. NM : Dodaj servers.company.netdo Search domainspola na karcie IPv4 dla połączenia.
jdthood,
Jeśli na twoim komputerze /etc/resolv.confnie ma dowiązania symbolicznego, ../run/resolvconf/resolv.confuruchom go, sudo dpkg-reconfigure resolvconfaby przywrócić dowiązanie symboliczne.
jdthood,
1

Jeśli używasz tożsamości SSH - i przy tak wielu serwerach warto na to spojrzeć - wtedy, jak powiedział OrangeDog, ustawienie CanonicaliseHostname i CanonicaliseDomains umożliwi także dopasowanie do wpisu @ cert-Authority na znanych hostach

znane_hosty @ certyfikat-certyfikat * .example.com ssh-rsa AAAddadfkjaeio ...

bez opcji Canonicalise należy użyć „ssh host.example.com”

W przypadku opcji Canonicalise „ssh myhost” będzie pasować.

Dodałbym to jako komentarz do odpowiedzi OrangeDogs, gdyby przedstawiciel mógł ...

Richard N.
źródło
0

Aby uzyskać szybkie rozwiązanie, które działa w różnych programach, możesz również ustawić domenę, vded-xx-001aby przekierowała na określony adres IP, edytując tak, /etc/hostsaby zawierała taką linię:

173.194.41.90  vded-xx-001

Działa to w Twojej przeglądarce: http://vded-xx-001/

Jak również za pomocą narzędzi wiersza polecenia, takich jak SSH:

$ ssh user@vded-xx-001

(Osobiście wolę rozwiązanie konfiguracyjne SSH ).

Flimm
źródło
0

W przypadku systemowego rozpoznawania nazw domen lubię ustawiać rzeczy w mojej sieci. Ustawiłbym więc na serwerze DHCP nazwę domeny i serwer DNS, aby wszystkie maszyny miały odpowiednie uprawnienia, w resolv.conftym

  • Adres IP pierwotnego serwera DNS
  • Domena
  • dyrektywa wyszukiwania

Zależy to od serwera DHCP i konfiguracji sieci, którą chcesz ... Osobiście nie lubię niestandardowej konfiguracji komputera, gdy jest to coś ogólnego dla sieci

Philippe Gachoud
źródło