Parar o cliente ssh de oferecer todas as chaves públicas que ele pode encontrar?

21

Como a maioria dos sysadmins eu uso o openssh o tempo todo. Eu tenho cerca de uma dúzia de chaves ssh, eu gosto de ter uma chave ssh diferente para cada host. No entanto, isso causa um problema quando estou me conectando a um host pela primeira vez, e tudo que eu tenho é uma senha. Eu quero apenas se conectar ao host usando uma senha, sem chave ssh neste caso. No entanto, o cliente ssh oferecerá todas as chaves públicas no meu ~/.ssh/ (eu sei disso ao observar a saída de ssh -v ). Como tenho muitos, serei desconectado por muitas falhas de autenticação.

Existe alguma maneira de dizer ao meu cliente ssh para não oferecer todas as chaves ssh?

    
por Rory 08.05.2010 / 18:58

5 respostas

25

Esse é o comportamento esperado de acordo com a página do manual de ssh_config :

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authentica‐
         tion identity is read.  The default is ~/.ssh/identity for protocol
         version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa and ~/.ssh/id_rsa for
         protocol version 2.  Additionally, any identities represented by the
         authentication agent will be used for authentication.  

         [...]

         It is possible to have multiple identity files specified in configu‐
         ration files; all these identities will be tried in sequence.  Mul‐
         tiple IdentityFile directives will add to the list of identities
         tried (this behaviour differs from that of other configuration
         directives).

Basicamente, a especificação de IdentityFile s apenas adiciona chaves a uma lista atual que o agente SSH já apresentou ao cliente.

Tente substituir esse comportamento por isso na parte inferior do arquivo .ssh/config :

Host *
  IdentitiesOnly yes

Você também pode substituir essa configuração no nível do host, por exemplo:

Host foo
  User bar
  IdentityFile /path/to/key
  IdentitiesOnly yes
    
por 12.06.2013 / 12:19
31

Embora outros tenham sugerido isso com soluções baseadas em configuração, provavelmente vale a pena ressaltar que você pode facilmente fazer isso apenas uma vez na linha de comando com:

ssh -o 'PubkeyAuthentication no' myhostname.mydomain
    
por 28.08.2012 / 00:57
11

Seguindo a solução de James Sneeringer, você pode querer apenas configurar um ssh_config ao longo das linhas de:

Host *.mycompany.com
  IdentityFile .ssh/id_dsa_mycompany_main

Host *.mycustomer.com
  IdentityFile .ssh/id_dsa_mycustomer

Host *
  RSAAuthentication no #this should be up top, avoid ssh1 at all costs
  PubkeyAuthentication no

Se você se conectar com uma chave particular a muitas máquinas que não estão em um domínio comum, considere dar a elas todos os CNAMEs em seu próprio DNS. Eu faço isso com todos os sistemas do cliente.

    
por 08.05.2010 / 20:41
2

Semelhante à solução do user23413, você pode desabilitar a autenticação de chave pública para um determinado host (ou padrão curinga):

Host *.example.org
RSAAuthentication no        # SSHv1
PubkeyAuthentication no     # SSHv2
    
por 08.05.2010 / 20:20
-1

Se você apontar para um determinado arquivo de chave com ssh -i / caminho / para / chave, ele somente será usado, mesmo que outras pessoas estejam carregadas no agente, e você não será solicitado a fornecer a senha. Você também pode editar você ~ / .ssh / config e ad algo assim ...

Anfitrião foo.example.com
IdentityFile .ssh / id_rsa_foo.example.com

você também pode fazer ...

Anfitrião * .example.org
IdentityFile .ssh / id_rsa_example.org

    
por 08.05.2010 / 19:45