OpenSSH desabilita o ControlMaster para um determinado nome de host

20

Estou usando OpenSSH_5.9p1, OpenSSL 0.9.8r 8 Feb 2011com o Mac OS X Snow Leopard. Eu tenho o ControlMasterrecurso configurado para manter conexões persistentes. Meu ~/.ssh/configtem o seguinte:

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

Host *.unfuddle.com
  ControlMaster no

No entanto, pelo que vejo - mesmo quando estou tentando usar o SSH para hosts unfuddle.com, a conexão principal é sempre criada:

[andrey-mbp ~] $ ssh -v [email protected]
OpenSSH_5.9p1, OpenSSL 0.9.8r 8 de fevereiro de 2011
debug1: Lendo dados de configuração /Users/akhkharu/.ssh/config
debug1: /Users/akhkharu/.ssh/config linha 1: Aplicando opções para *
debug1: /Users/akhkharu/.ssh/config linha 6: Aplicando opções para * .unfuddle.com
debug1: Lendo dados de configuração /usr/local/Cellar/openssh/5.9p1/etc/ssh_config
debug1: auto-mux: Tentando o mestre existente
debug1: O soquete de controle "/ms/[email protected]:22" não existe
debug1: Conectando à porta 22 do droolit.unfuddle.com [174.129.5.196].
debug1: conexão estabelecida.
debug1: arquivo de identidade /Users/akhkharu/.ssh/id_rsa tipo 1
debug1: arquivo de identidade /Users/akhkharu/.ssh/id_rsa-cert type -1
debug1: arquivo de identidade /Users/akhkharu/.ssh/id_dsa tipo 2
debug1: arquivo de identidade /Users/akhkharu/.ssh/id_dsa-cert type -1
debug1: arquivo de identidade /Users/akhkharu/.ssh/id_ecdsa type -1
debug1: arquivo de identidade /Users/akhkharu/.ssh/id_ecdsa-cert type -1
debug1: Protocolo remoto versão 2.0, versão de software remoto OpenSSH_5.8
debug1: match: OpenSSH_5.8 pat OpenSSH *
debug1: Ativando o modo de compatibilidade para o protocolo 2.0
debug1: String de versão local SSH-2.0-OpenSSH_5.9
debug1: SSH2_MSG_KEXINIT enviado
debug1: SSH2_MSG_KEXINIT recebido
debug1: kex: server-> client aes128-ctr hmac-md5 none
debug1: kex: cliente-> servidor aes128-ctr hmac-md5 none
debug1: enviando SSH2_MSG_KEX_ECDH_INIT
debug1: esperando SSH2_MSG_KEX_ECDH_REPLY
debug1: Chave do host do servidor: RSA a6: 74: 33: 36: 95: 31: 6e: a6: d7: 71: 87: b8: 3c: 38: e2: 60
debug1: o host 'droolit.unfuddle.com' é conhecido e corresponde à chave do host RSA.
debug1: chave encontrada em /Users/akhkharu/.ssh/known_hosts:390
debug1: ssh_rsa_verify: assinatura correta
debug1: SSH2_MSG_NEWKEYS enviado
debug1: esperando SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS recebido
debug1: Roaming não permitido pelo servidor
debug1: SSH2_MSG_SERVICE_REQUEST enviado
debug1: SSH2_MSG_SERVICE_ACCEPT recebido
debug1: autenticações que podem continuar: publickey
debug1: Próximo método de autenticação: publickey
debug1: Oferecendo chave pública RSA: /Users/akhkharu/.ssh/id_rsa
debug1: O servidor aceita a chave: pkalg ssh-rsa blen 277
debug1: autenticação bem-sucedida (chave pública).
Autenticado em droolit.unfuddle.com ([174.129.5.196]: 22).
debug1: configurando o soquete mestre multiplex
debug1: canal 0: novo [/ms/[email protected]:22]
debug1: control_persist_detach: processo principal de background
debug1: bifurcando em segundo plano
debug1: Entrando na sessão interativa.
debug1: conexão de controle de multiplexação
debug1: canal 1: novo [controle-mux]
debug1: canal 2: novo [sessão do cliente]
debug1: Remoto: comando forçado.
debug1: Remoto: encaminhamento de porta desativado.
debug1: Remoto: encaminhamento X11 desabilitado.
debug1: Remoto: encaminhamento de agente desabilitado.
debug1: Remoto: alocação de Pty desabilitada.
debug1: Remoto: comando forçado.
debug1: Remoto: encaminhamento de porta desativado.
debug1: Remoto: encaminhamento X11 desabilitado.
debug1: Remoto: encaminhamento de agente desabilitado.
debug1: Remoto: alocação de Pty desabilitada.
debug1: mux_client_request_session: identificação da sessão principal: 2
Falha no pedido de alocação de PTY
Precisa de SSH_ORIGINAL_COMMAND
debug1: client_input_channel_req: resposta de status de saída do tipo 2 do canal 2
debug1: client_input_channel_req: canal 2 rtype [email protected] resposta 0
debug1: canal 2: grátis: sessão de cliente, nchannels 3
debug1: canal 1: livre: controle de mux, nchannels 2
A conexão compartilhada com droolit.unfuddle.com foi encerrada.
[andrey-mbp ~] $ ll / ms /
0 total
srw ------- 1 akhkharu admin 0B 17 de julho 11:55 [email protected]: 22

Obrigado,
Andrey.

Andrey Chernih
fonte

Respostas:

19

A *estrofe do seu host está capturando-a. Coloque estrofes de host mais específicas anteriormente.

Ignacio Vazquez-Abrams
fonte
Obrigado, mas isso não funcionaria para mim. Preciso do ControlMaster ativado para todos os hosts, mas não para unfuddle.com. Não consigo listar todos os hosts que utilizo no arquivo de configuração. O que parece estar funcionando é colocar a regra para unfuddle.com no início.
22812 Andrey Chernih
8
Você quer dizer ... quando você colocou a estrofe de host mais específica anteriormente?
Ignacio Vazquez-Abrams
Sim, é estranho, mas funciona.
22612 Andrey Chernih
Eu estava pesquisando as páginas de manual há muito tempo, mas é uma coisa estranha e prioritária!
JanKanis
1
Temo que me pergunte até o dia da minha morte se Andrey já percebeu que essa resposta está correta e que o comentário que ele concordou indica isso.
224649 $
10

Conforme descrito na resposta à minha pergunta semelhante sobre o SuperUser , você pode usar a sintaxe "bang" para excluir hosts específicos da Host *estrofe original , assim:

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

Na minha situação, descobri que a ordem das Hostseções ao usar a Host *parecia irrelevante, mas o método acima sempre funciona.

Scott Dudley
fonte
5

Para mim ele funciona quando eu também estabelecido ControlPathpara nonedentro da hostestrofe.

Podes tentar:

Host *.unfuddle.com   
    ControlMaster no
    ControlPath none

Em seguida, nenhuma sessão de controle será gerada.

Tim Weippert
fonte
No meu caso, eu tive que fazer isso mais colocar a Host *seção no final do arquivo e funcionou.
a3nm