OpenSSH wyłącza ControlMaster dla podanej nazwy hosta

20

Używam OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011z systemem Mac OS X Snow Leopard. Mam ControlMasterskonfigurowaną funkcję utrzymywania trwałych połączeń. Mam ~/.ssh/confignastępujące:

Host *
  ControlPath /ms/%r@%h:%p
  ControlMaster auto
  ControlPersist 4h

Host *.unfuddle.com
  ControlMaster no

Jednak z tego, co widzę - nawet gdy próbuję użyć SSH dla hostów unfuddle.com, połączenie główne jest zawsze tworzone:

[andrey-mbp ~] $ ssh -v [email protected]
OpenSSH_5.9p1, OpenSSL 0.9.8r 8 lutego 2011 r
debug1: odczyt danych konfiguracyjnych /Users/akhkharu/.ssh/config
debug1: /Users/akhkharu/.ssh/config wiersz 1: Stosowanie opcji dla *
debug1: /Users/akhkharu/.ssh/config wiersz 6: Stosowanie opcji dla * .unfuddle.com
debug1: odczyt danych konfiguracyjnych /usr/local/Cellar/openssh/5.9p1/etc/ssh_config
debug1: auto-mux: Próbowanie istniejącego wzorca
debug1: Gniazdo sterujące „/ms/[email protected]:22” nie istnieje
debug1: Łączenie z droolit.unfuddle.com [174.129.5.196] port 22.
debug1: Połączenie ustanowione.
debug1: plik tożsamości /Users/akhkharu/.ssh/id_rsa typ 1
debug1: plik tożsamości /Users/akhkharu/.ssh/id_rsa-cert typ -1
debug1: plik tożsamości /Users/akhkharu/.ssh/id_dsa typ 2
debug1: plik tożsamości /Users/akhkharu/.ssh/id_dsa-cert typ -1
debug1: plik tożsamości /Users/akhkharu/.ssh/id_ecdsa typ -1
debug1: plik tożsamości /Users/akhkharu/.ssh/id_ecdsa-cert typ -1
debug1: Zdalny protokół w wersji 2.0, zdalna wersja oprogramowania OpenSSH_5.8
debug1: dopasowanie: OpenSSH_5.8 pat OpenSSH *
debug1: Włączanie trybu zgodności dla protokołu 2.0
debug1: ciąg wersji lokalnej SSH-2.0-OpenSSH_5.9
debug1: wysłano SSH2_MSG_KEXINIT
debug1: odebrano SSH2_MSG_KEXINIT
debug1: kex: server-> client aes128-ctr hmac-md5 brak
debug1: kex: client-> server aes128-ctr hmac-md5 brak
debug1: wysyłanie SSH2_MSG_KEX_ECDH_INIT
debug1: oczekiwanie SSH2_MSG_KEX_ECDH_REPLY
debug1: klucz hosta serwera: RSA a6: 74: 33: 36: 95: 31: 6e: a6: d7: 71: 87: b8: 3c: 38: e2: 60
debug1: Host „droolit.unfuddle.com” jest znany i pasuje do klucza hosta RSA.
debug1: Znaleziono klucz w /Users/akhkharu/.ssh/known_hosts:390
debug1: ssh_rsa_verify: poprawny podpis
debug1: wysłano SSH2_MSG_NEWKEYS
debug1: oczekiwanie SSH2_MSG_NEWKEYS
debug1: odebrano SSH2_MSG_NEWKEYS
debug1: Roaming niedozwolony przez serwer
debug1: wysłano SSH2_MSG_SERVICE_REQUEST
debug1: otrzymano SSH2_MSG_SERVICE_ACCEPT
debug1: Uwierzytelnienia, które można kontynuować: publickey
debug1: Następna metoda uwierzytelnienia: publickey
debug1: Oferowanie klucza publicznego RSA: /Users/akhkharu/.ssh/id_rsa
debug1: Serwer akceptuje klucz: pkalg ssh-rsa blen 277
debug1: Uwierzytelnianie powiodło się (publickey).
Uwierzytelniono w witrynie droolit.unfuddle.com ([174.129.5.196]: 22).
debug1: konfigurowanie głównego gniazda multipleksu
debug1: kanał 0: nowy [/ms/[email protected]:22]
debug1: control_persist_detach: proces główny tła
debug1: przejście do tła
debug1: Wejście do sesji interaktywnej.
debug1: połączenie sterowania multipleksowaniem
debug1: channel 1: new [mux-control]
debug1: kanał 2: nowy [sesja klienta]
debug1: Remote: polecenie wymuszone.
debug1: Remote: Przekazywanie portów wyłączone.
debug1: Zdalne: przekazywanie X11 wyłączone.
debug1: Zdalne: przekazywanie agentów wyłączone.
debug1: Remote: Przydział Pty wyłączony.
debug1: Remote: polecenie wymuszone.
debug1: Remote: Przekazywanie portów wyłączone.
debug1: Zdalne: przekazywanie X11 wyłączone.
debug1: Zdalne: przekazywanie agentów wyłączone.
debug1: Remote: Przydział Pty wyłączony.
debug1: mux_client_request_session: identyfikator sesji master: 2
Żądanie alokacji PTY nie powiodło się
Potrzebujesz SSH_ORIGINAL_COMMAND
debug1: client_input_channel_req: kanał 2 typ wyjścia typ odpowiedzi 0
debug1: client_input_channel_req: kanał 2 rtype [email protected] odpowiedź 0
debug1: kanał 2: bezpłatny: sesja klienta, kanały nchannels 3
debug1: kanał 1: wolny: kontrola multipleksera, nchannels 2
Wspólne połączenie z droolit.unfuddle.com zostało zamknięte.
[andrey-mbp ~] $ ll / ms /
łącznie 0
srw ------- 1 akhkharu admin 0B 17 lipca 11:55 [email protected]: 22

Dzięki,
Andrey.

Andrey Chernih
źródło

Odpowiedzi:

19

*Strefa twojego hosta to łapie. Wcześniej umieść bardziej szczegółowe sekcje hosta.

Ignacio Vazquez-Abrams
źródło
Dzięki, ale to by mi nie działało. Potrzebuję włączyć ControlMaster dla wszystkich hostów, ale nie dla unfuddle.com. Nie mogę wyświetlić wszystkich hostów, których używam w pliku konfiguracyjnym. To, co wydaje się działać, to umieszczenie reguły dla unfuddle.com na samym początku.
Andrey Chernih,
8
Masz na myśli ... kiedy wcześniej umieścisz bardziej szczegółową zwrotkę na hoście?
Ignacio Vazquez-Abrams
Tak, to dziwne, ale działa.
Andrey Chernih,
Od wieków przeszukiwałem strony, ale to dziwna rzecz priorytetowa!
JanKanis
1
Obawiam się, że zastanawię się aż do mojego śmierci, czy Andrey kiedykolwiek zrozumiał, że ta odpowiedź jest poprawna i że komentarz, który zgodził się z tym, podkreśla.
ogromnie superiorman
10

Jak opisano w odpowiedzi na moje podobne pytanie dotyczące SuperUser , możesz użyć składni „bang”, aby wykluczyć określone hosty z oryginalnej sekcji Host *, takie jak:

Host * !*.unfuddle.com
    ControlPath /ms/%r@%h:%p
    ControlMaster auto
    ControlPersist 4h

W mojej sytuacji okazało się, że kolejność Hostsekcji przy użyciu Host *wydaje się być nieistotna, ale powyższa metoda zawsze działa.

Scott Dudley
źródło
5

Dla mnie to działa, kiedy dodatkowo ustawione ControlPathdo nonewewnątrz hostzwrotki.

Możesz spróbować:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

Wtedy sesja kontrolna nie zostanie wygenerowana.

Tim Weippert
źródło
W moim przypadku musiałem to zrobić oraz umieścić Host *sekcję na końcu pliku i zadziałało.
a3nm