OpenSSH disabilita ControlMaster per un determinato nome host


20

Sto usando OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011con Mac OS X Snow Leopard. Ho ControlMasterfunzionalità configurate per mantenere connessioni persistenti. Ho ~/.ssh/configil seguente:

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

Host *.unfuddle.com
  ControlMaster no

Tuttavia, da quello che vedo - anche quando sto cercando di utilizzare SSH per host unfuddle.com, la connessione principale viene sempre creata:

[andrey-mbp ~] $ ssh -v git@droolit.unfuddle.com
OpenSSH_5.9p1, OpenSSL 0.9.8r 8 feb 2011
debug1: lettura dei dati di configurazione /Users/akhkharu/.ssh/config
debug1: /Users/akhkharu/.ssh/config line 1: applicazione delle opzioni per *
debug1: /Users/akhkharu/.ssh/config line 6: applicazione delle opzioni per * .unfuddle.com
debug1: lettura dei dati di configurazione /usr/local/Cellar/openssh/5.9p1/etc/ssh_config
debug1: auto-mux: prova del master esistente
debug1: il socket di controllo "/ms/git@droolit.unfuddle.com:22" non esiste
debug1: connessione a droolit.unfuddle.com [174.129.5.196] porta 22.
debug1: connessione stabilita.
debug1: file di identità /Users/akhkharu/.ssh/id_rsa tipo 1
debug1: file di identità /Users/akhkharu/.ssh/id_rsa-cert tipo -1
debug1: file di identità /Users/akhkharu/.ssh/id_dsa tipo 2
debug1: file di identità /Users/akhkharu/.ssh/id_dsa-cert tipo -1
debug1: file di identità /Users/akhkharu/.ssh/id_ecdsa tipo -1
debug1: file di identità /Users/akhkharu/.ssh/id_ecdsa-cert tipo -1
debug1: protocollo remoto versione 2.0, versione software remota OpenSSH_5.8
debug1: match: OpenSSH_5.8 pat OpenSSH *
debug1: abilitazione della modalità di compatibilità per il protocollo 2.0
debug1: stringa di versione locale SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT inviato
debug1: SSH2_MSG_KEXINIT ricevuto
debug1: kex: server-> client aes128-ctr hmac-md5 nessuno
debug1: kex: client-> server aes128-ctr hmac-md5 nessuno
debug1: invio di SSH2_MSG_KEX_ECDH_INIT
debug1: in attesa di SSH2_MSG_KEX_ECDH_REPLY
debug1: chiave host del server: RSA a6: 74: 33: 36: 95: 31: 6e: a6: d7: 71: 87: b8: 3c: 38: e2: 60
debug1: l'host "droolit.unfuddle.com" è noto e corrisponde alla chiave host RSA.
debug1: chiave trovata in /Users/akhkharu/.ssh/known_hosts:390
debug1: ssh_rsa_verify: firma corretta
debug1: SSH2_MSG_NEWKEYS inviato
debug1: in attesa di SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS ricevuto
debug1: roaming non consentito dal server
debug1: SSH2_MSG_SERVICE_REQUEST inviato
debug1: SSH2_MSG_SERVICE_ACCEPT ricevuto
debug1: autenticazioni che possono continuare: publickey
debug1: metodo di autenticazione successivo: publickey
debug1: offerta della chiave pubblica RSA: /Users/akhkharu/.ssh/id_rsa
debug1: il server accetta la chiave: pkalg ssh-rsa blen 277
debug1: autenticazione riuscita (publickey).
Autenticato su droolit.unfuddle.com ([174.129.5.196]: 22).
debug1: impostazione del socket multiplex master
debug1: canale 0: nuovo [/ms/git@droolit.unfuddle.com:22]
debug1: control_persist_detach: processo master in background
debug1: biforcazione in background
debug1: accesso alla sessione interattiva.
debug1: connessione di controllo multiplexing
debug1: canale 1: nuovo [mux-control]
debug1: canale 2: nuovo [sessione client]
debug1: Remote: comando forzato.
debug1: Remote: port forwarding disabilitato.
debug1: Remote: inoltro X11 disabilitato.
debug1: Remoto: inoltro agente disabilitato.
debug1: Remote: allocazione Pty disabilitata.
debug1: Remote: comando forzato.
debug1: Remote: port forwarding disabilitato.
debug1: Remote: inoltro X11 disabilitato.
debug1: Remoto: inoltro agente disabilitato.
debug1: Remote: allocazione Pty disabilitata.
debug1: mux_client_request_session: ID sessione master: 2
Richiesta di allocazione PTY non riuscita
Hai bisogno di SSH_ORIGINAL_COMMAND
debug1: client_input_channel_req: risposta stato stato uscita canale 2 rtype 0
debug1: client_input_channel_req: canale 2 rtype eow@openssh.com risposta 0
debug1: canale 2: gratuito: client-session, nchannels 3
debug1: canale 1: gratuito: mux-control, nchannels 2
Connessione condivisa a droolit.unfuddle.com chiusa.
[andrey-mbp ~] $ ll / ms /
totale 0
srw ------- 1 akhkharu admin 0B 17 lug 11:55 git@droolit.unfuddle.com: 22

Grazie
Andrey.

Risposte:


19

La tua *stanza host la sta catturando. Metti le stanze host più specifiche prima.


Grazie, ma non avrebbe funzionato per me. Ho bisogno di ControlMaster abilitato per tutti gli host, ma non per unfuddle.com. Non riesco a elencare tutti gli host che utilizzo nel file di configurazione. Ciò che sembra funzionare sta ponendo la regola per unfuddle.com all'inizio.
Andrey Chernih,

8
Vuoi dire ... quando hai messo la stanza host più specifica prima?
Ignacio Vazquez-Abrams,

Sì, è strano, ma funziona.
Andrey Chernih,

Ho cercato le manpage per anni, ma è una strana cosa prioritaria!
JanKanis,

1
Temo che mi chiederò fino al giorno della mia morte se Andrey si fosse mai accorto del fatto che questa risposta fosse corretta e che il commento concordato lo sottolinea.
vastlysuperiorman,

10

Come descritto nella risposta alla mia domanda simile su SuperUser , puoi usare la sintassi "bang" per escludere host specifici dalla Host *stanza originale , in questo modo:

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

Nella mia situazione, ho scoperto che l'ordine delle Hostsezioni durante l'utilizzo di a Host *sembrava essere irrilevante, ma il metodo sopra funziona sempre.


5

Per me funziona quando ho impostato ControlPathanche noneall'interno della hoststanza.

Puoi provare:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

Quindi non verrà generata alcuna sessione di controllo.


Nel mio caso ho dovuto fare questo e mettere la Host *sezione alla fine del file e ha funzionato.
a3nm,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.