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 user@vded-xx-001.servers.company.net

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ę


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

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 .


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/

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ź


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


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


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

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.