vários alias ssh selecionando usuário errado ao encaminhar

3

Estou seguindo o procedimento de identidade dupla para bitbucket :

Tenho 2 contas bitbucket ccmcbeck e chrisbeck. O primeiro é pessoal, o segundo é trabalho.

No meu Mac local, eu tenho isso na minha ~/.ssh/config

Host *.work.com
  User chris
  ForwardAgent yes
  IdentityFile ~/.ssh/work_dsa
Host bitbucket-personal
  HostName bitbucket.org
  User ccmcbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
Host bitbucket-work
  HostName bitbucket.org
  User chrisbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa

No meu Mac local eu ssh -T tudo é bom, eu recebo:

$ ssh -T git@bitbucket-personal
logged in as ccmcbeck.
$ ssh -T git@bitbucket-work
logged in as chrisbeck.

No meu Mac local, a versão ssh é OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011

Quando eu ssh foo.work.com para minha caixa de Linux, eu recebo:

$ ssh-add -l
1024 ... /Users/chris/.ssh/work_dsa (DSA)
2048 ... /Users/chris/.ssh/bitbucket_ccmcbeck_rsa (RSA)
2048 ... /Users/chris/.ssh/bitbucket_chrisbeck_rsa (RSA)

Em foo.work.com, Eu também tenho isso na minha ~/.ssh/config

Host bitbucket-personal
  HostName bitbucket.org
  User ccmcbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
Host bitbucket-work
  HostName bitbucket.org
  User chrisbeck
  ForwardAgent no
  IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa

No entanto, foo.work.com quando eu ssh -T, faz referência ao usuário errado para git@bitbucket-work

$ ssh -T git@bitbucket-personal
logged in as ccmcbeck.
$ ssh -T git@bitbucket-work
logged in as ccmcbeck.

Em foo.work.com, a versão ssh é OpenSSH_4.3p2, OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008

Por que minha configuração está causando foo.work.com referenciar o usuário errado?

Chris Beck
fonte
FWIW, se eu ssh-add -d minha bitbucket-personal identidade, então foo.work.com usa o correto User
Chris Beck
Ele também se comporta da mesma maneira em um servidor da AWS que tem OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
Chris Beck
Parece que a ordem em que as chaves são adicionadas faz diferença. IOW foo.work.com usa o primeiro relatado por ssh-add -l.
Chris Beck

Respostas:

3

A explicação mais provável parece-me que o agente ssh está usando qualquer chave que tenha carregado a qualquer momento. Você pode soltar esse comportamento usando o IdentitiesOnly diretiva em seu arquivo de configuração, como segue:

 Host bitbucket-personal
 HostName bitbucket.org
 User ccmcbeck
 ForwardAgent no
 IdentityFile ~/.ssh/bitbucket_ccmcbeck_rsa
 IdentitiesOnly yes

 Host bitbucket-work
 HostName bitbucket.org
 User chrisbeck
 ForwardAgent no
 IdentityFile ~/.ssh/bitbucket_chrisbeck_rsa
 IdentitiesOnly yes

De ssh man page:

Especifica que o ssh (1) deve usar apenas os arquivos de identidade de autenticação configurados nos arquivos ssh_config, mesmo que o ssh-agent (1) ofereça mais identidades. O argumento para esta palavra-chave deve ser '' sim '' ou '' não ''. Esta opção é destinada a situações em que o agente ssh oferece muitas identidades diferentes. O padrão é '' não ''.

EDITAR:

Em seu post há essas linhas, até o final:

 debug1: SSH2_MSG_SERVICE_ACCEPT received
 debug2: key: /home/chrisb/.ssh/bitbucket_chrisbeck_rsa ((nil))
 debug1: Authentications that can continue: publickey

Eles mostram claramente que essa chave não foi aceita. É por isso que você sempre loga como ccmcbeck: essa chave funciona, e sem IdentitiesOnly yes, o cliente tentou outras chaves até encontrar uma que funcionasse. Introduzindo essa restrição, pelo menos esclarecemos a natureza do problema.

Como no seu Mac você não parece ter esse problema, ele deve residir no cliente Linux e, em particular, na chave privada que você está tentando usar. A melhor coisa é gerar um novo, local para o Linux, e colocar seu .pub contraparte entre os authorized_keys. Espero que isto ajude.

EDIT2:

... ou você pode seguir esta resposta do superusuário para selecionar a chave privada que você deseja usar especificando sua contraparte pública do agente encaminhado. A resposta ainda requer o uso do IdentitiesOnly yes opção.

MariusMatutiae
fonte
Eu tentei isso e recebi "permissão negada" quando ssh -T para alias.
Chris Beck
@ChrisBeck Você poderia ser mais específico? Correndo ssh com o -v bandeira, por favor.
MariusMatutiae
@ChrisBeck Por favor, veja minha edição
MariusMatutiae
Obrigado @MariusMatutiae. FWIW, ambos ccmcbeck e chrisbeck trabalhar se eles são o primeiro em ssh-add -l sem IdentitiesOnly yes. Com IdentitiesOnly yes em work.foo.com, ssh parece procurar apenas por chaves locais, não pelas chaves passadas através do agente ssh no meu Mac.
Chris Beck
você estava muito perto da solução que está aqui superuser.com/questions/273037/… . Além disso, eu precisava colocar a chave do pub work.foo.com e referência que no ~/.ssh/config. Se você atualizar sua resposta, eu aceitarei
Chris Beck