ssh_config Host * substitui o host anterior

1

Estou tentando fazer com que meu .ssh / config suporte diferentes chaves ssh para o mesmo host, para que eu possa me comprometer com bitbucket como usuário pessoal ou de trabalho, e outras coisas ssh ainda usam meu usuário de trabalho.

Meu arquivo de configuração é assim:

Host bitbucket-personal
 HostName bitbucket.com
 User git
 IdentityFile ~/.ssh/personal
 IdentitiesOnly yes

Host *
 AddKeysToAgent yes
 UseKeychain yes
 IdentityFile ~/.ssh/work

quando eu ssh bitbucket-personal está usando a chave ~/.ssh/work , que não é o que estou esperando (veja abaixo docs, ele deve usar o primeiro IdentityFile correspondente). Mas todos os outros parâmetros estão corretamente referenciados (eg [email protected]). Se eu remover a seção Host *, ele usa a chave correta.

O que estou fazendo de errado? Acho que não entendi como a precedência aqui funciona.

For each parameter, the first obtained value will be used. The configuration files contain sections separated by “Host” specifications, and that section is only applied for hosts that match one of the patterns given in the specification. The matched host name is the one given on the command line.

Since the first obtained value for each parameter is used, more host-specific declarations should be given near the beginning of the file, and general defaults at the end.

Rastreamento detalhado completo abaixo:

luke$ ssh -v bitbucket-personal
OpenSSH_7.8p1, LibreSSL 2.7.3
debug1: Reading configuration data /Users/luke/.ssh/config
debug1: /Users/luke/.ssh/config line 1: Applying options for bitbucket-personal
debug1: /Users/luke/.ssh/config line 7: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Connecting to bitbucket.com port 22.
debug1: Connection established.
debug1: identity file /Users/luke/.ssh/luke type 0
debug1: identity file /Users/luke/.ssh/luke-cert type -1
debug1: identity file /Users/luke/.ssh/luke-cx type 0
debug1: identity file /Users/luke/.ssh/luke-cx-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.8
debug1: Remote protocol version 2.0, remote software version conker_1.1.15-49a70a8 app-154
debug1: no match: conker_1.1.15-49a70a8 app-154
debug1: Authenticating to bitbucket.com:22 as 'git'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ssh-rsa SHA256:qqq
debug1: Host 'bitbucket.com' is known and matches the RSA host key.
debug1: Found key in /Users/luke/.ssh/known_hosts:52
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:qqqq /Users/luke/.ssh/luke-cx
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: Authentication succeeded (publickey).
Authenticated to bitbucket.com ([18.205.93.3]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: pledge: network
debug1: Sending environment.
debug1: Sending env LANG = en_NZ.UTF-8
PTY allocation request failed on channel 0
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
logged in as lukemcgregor-x.
    
por Luke McGregor 25.11.2018 / 11:48

1 resposta

1

Suponho que você esteja usando o ssh-agent ou algo parecido para armazenar em cache suas chaves privadas descriptografadas, o que pode alterar a ordem em que as chaves são oferecidas. Isso seria visível em nível de log mais detalhado (com vários -v ).

Além disso, a opção IdentitiesOnly tem um significado ligeiramente diferente do que você pode supor - limitará as chaves que serão oferecidas ao servidor, mas não o limitará ao que precede a opção. É usado principalmente para evitar a oferta de identidades no local padrão carregado automaticamente ( ~/.ssh/id_{rsa,dsa,ecdsa,ed25519} ).

A opção IdentitiyFile também é um pouco diferente do que você supõe. É permitido ser especificado várias vezes (consulte a página de manual), assim também será usada a seção Match * .

Se você quiser usar alguma chave por padrão e outra somente para esse host específico, mova a chave "padrão" para a localização padrão ~/.ssh/id_rsa e remova-a do arquivo de configuração. Isso deve resolver seus problemas.

    
por 26.11.2018 / 10:07