
Eu tinha um ~/.ssh/config
arquivo 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 User
entrada, *
mas isso não resolveu.
meu .ssh/config
arquivo 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.com
em vez de repetir. Nada funciona. Alguma idéia do que há de errado aí?
Como posso ter um padrão User
e IdentityFile
substituí-los por domínio?
edição 1: adicionei Host exact.hostname.domain.com
antes e depois daquele *
. e ssh -vvv
mostra:
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 Host
entradas 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_git
se esse é o IdentityFile
único mencionado abaixo Host github.com
? e por que ele está tentando enviar id_null
mesmo que corresponda ao explícito Host exact.hostname.domain.com
como 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 ssh
instanciaçã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-config
diz:
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 Host
entrada correspondente, conforme mostrado pelas ssh -vv
linhas correspondentes: Applying options for
.
No caso geral, isso significa que Host *
deveria serdurar.