O que pode fazer com que as alterações .ssh/config sejam ignoradas

O que pode fazer com que as alterações .ssh/config sejam ignoradas

Eu tinha um ~/.ssh/configarquivo que estava funcionando bem. estava neste formato:

Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 5000
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain

(tinha muito mais domínios, mas vamos ignorá-los por enquanto)

Estava funcionando perfeitamente, mesmo o manual dizendo que os padrões de hosts mais específicos deveriam ficar no topo, sempre funcionou bem assim. Eu sempre fiz ssh para esses dois domínios e as chaves de identidade corretas foram obtidas perfeitamente. Nunca tive problemas se a chave nula fosse tentada para esses dois domínios. E eu usei isso por anos. Sempre tenho o usuário e a chave certos. Usei esse mesmo arquivo de configuração no Debian, Fedora e Osx.

Hoje, no osx 10.10 (OpenSSH_6.2p2, OSSLShim 0.9.8r 8 de dezembro de 2011), que funcionou antes, tentei também adicionar User unkownà *regra no topo. e de repente, agora todo ssh que eu tento, o ssh envia user=unkown e Identityfile=id_null, que não faz login em lugar nenhum. Isso me fez ler a página de manual do ssh_config e deixar tudo exatamente de acordo com o livro ... e ainda não funcionou. Também tentei remover a Userentrada, *mas isso não resolveu.

meu .ssh/configarquivo atual é

Host exact.hostname.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host *.domain.com
  User mydomainuser
  IdentityFile ~/.ssh/id_domain
Host github.com
  User gcb
  IdentityFile ~/.ssh/id_domain
Host *
  IdentityFile ~/.ssh/id_null
  TCPKeepAlive no
  ServerAliveCountMax 50

ele ainda tentará usar id_null como arquivo de identidade quando i ssh exact.hostname.domain.com. Também tentei usar vários padrões e Host *.domain.com exact.hostname.domain.comem vez de repetir. Nada funciona. Alguma idéia do que há de errado aí?

Como posso ter um padrão Usere IdentityFilesubstituí-los por domínio?


edição 1: adicionei Host exact.hostname.domain.comantes e depois daquele *. e ssh -vvvmostra:

debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com
debug1: /Users/.../.ssh/config line 19: Applying options for *
debug1: /Users/.../.ssh/config line 37: Applying options for exact.hostname.domain.com

mas eu ainda chego no finalno such identity: .ssh/id_null: No such file or directory


edição 2: alguma outra estranheza que vissh -vvv

ele sempre tenta usar todas as chaves que possuo. Então imaginei que poderia ter algum padrão codificado para .ssh/id_rsa*, então movi todas as minhas chaves privadas para .ssh/keys/ocultá-las desse padrão e atualizei as Hostentradas específicas ... acontece que ele está tentando chaves de todas as entradas do host! mesmo aqueles sem fósforo!

Recapitulando, tenho uma correspondência de host específica na parte superior e inferior do arquivo (só por segurança), depois os hosts que não correspondem e aquele *.

mas ssh -vvv mostra:

debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/x/.ssh/keys/id_rsa_git (0x7f954b700530),
debug2: key: /Users/x/.ssh/keys/id_rsa (0x7f954b415700), explicit
debug2: key: /Users/x/.ssh/id_null (0x0), explicit

Por que diabos está adicionando .ssh/keys/id_rsa_gitse esse é o IdentityFileúnico mencionado abaixo Host github.com? e por que ele está tentando enviar id_nullmesmo que corresponda ao explícito Host exact.hostname.domain.comcomo diz na saída de depuração debug1: /Users/.../.ssh/config line 1: Applying options for exact.hostname.domain.com?


editar 3:

depois de mover todas as minhas chaves para .ssh/keys/*e especificar apenas as chaves para cada host ssh_config, agora vejo em cada sshinstanciação:

/Users/me/.ssh/id_*[^p][^u][^b]: No such file or directory

mas mesmo depois disso,aindacarrega os IdentityFiles deoutrohosts em ssh_config durante a conexão. Por que?!

Responder1

man ssh-configdiz:

Como o primeiro valor obtido para cada parâmetro é usado, mais declarações específicas do host devem ser fornecidas próximo ao início do arquivo e padrões gerais no final.

Portanto, certifique-se de que a configuração desejada esteja na primeira Hostentrada correspondente, conforme mostrado pelas ssh -vv linhas correspondentes: Applying options for.

No caso geral, isso significa que Host *deveria serdurar.

informação relacionada