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 git@droolit.unfuddle.com
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/git@droolit.unfuddle.com: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/git@droolit.unfuddle.com: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 eow@openssh.com 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 git@droolit.unfuddle.com: 22

Dzięki,
Andrey.

Odpowiedzi:


19

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


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.


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.


W moim przypadku musiałem to zrobić oraz umieścić Host *sekcję na końcu pliku i zadziałało.
a3nm
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.