Como configuro o SSH para que ele não tente todos os arquivos de identidade automaticamente?

Como configuro o SSH para que ele não tente todos os arquivos de identidade automaticamente?

Tenho colocado meus arquivos de identidade ssh dentro da minha ~/.ssh/pasta. Provavelmente tenho cerca de 30 arquivos lá.

Quando eu me conectar aos servidores, especificarei o arquivo de identidade a ser usado com algo como

ssh -i ~/.ssh/client1-identidade[e-mail protegido]

No entanto, se eu não especificar um arquivo de identidade e apenas usar algo assim:

ssh[e-mail protegido]

eu recebo o erro

Muitas falhas de autenticação para user123

Entendo que isso ocorre porque, se nenhum arquivo de identidade for especificado e o ssh puder encontrar arquivos de identidade, ele tentará todos eles.

Também entendo que posso editar o ~/.ssh/configarquivo e especificar algo como:

Host example.com
PreferredAuthentications teclado interativo, senha

para evitar que essa conexão tente arquivos de identidade conhecidos.

Então, acho que poderia mover meus arquivos de identidade para fora do ~/.ssh/diretório ou especificar cada host para o qual desejo desabilitar a autenticação de arquivo de identidade no arquivo de configuração, mas existe alguma maneira de dizer ao SSH por padrão para não procurar por arquivos de identidade? Ou para especificar aqueles que irá procurar?

Responder1

Você pode usar a IdentitiesOnly=yesopção junto com IdentityFile(vejaPágina de manual ssh_config). Dessa forma, você pode especificar quais arquivos ele deve procurar.

Neste exemplo, ssh iráapenasprocure as identidades fornecidas nos arquivos ssh_config + as 4 listadas na linha de comando (as identidades fornecidas pelo agente serão ignoradas):

ssh -o IdentitiesOnly=yes \
    -o IdentityFile=id1.key \
    -o IdentityFile=id2.key \
    -i id3.key \
    -i id4.key \
    [email protected]

Os formulários -ie -o IdentityFile=são intercambiáveis.

Em .ssh/config, você pode incluir configurações como esta:

Host example
User user123
Hostname example.com
IdentityFile ~/.ssh/id_rsa_example
IdentityFile ~/.ssh/id_rsa_example2
IdentitiesOnly yes

Responder2

resposta curta do user76528está correto, mas acabei de ter esse problema e pensei que alguma elaboração seria útil. Você também pode se preocupar com esta solução se estiver se perguntando "Por que o ssh está ignorando minha opção de configuração do arquivo de identidade"?

Em primeiro lugar, ao contrário de todas as outras opções no ssh_config, o ssh não usa a primeira IdentityFileque encontra. Em vez disso, a IdentityFileopção adiciona esse arquivo a uma lista de identidades usadas. Você pode empilhar várias IdentityFileopções e o cliente ssh tentará todas elas até que o servidor aceite uma ou rejeite a conexão.

Segundo, se você usar um agente ssh, o ssh tentará automaticamente usar as chaves no agente, mesmo que você não as tenha especificado com a opção in ssh_config( IdentityFileou -i). Este é um motivo comum pelo qual você pode receber o Too many authentication failures for usererro. Usar a IdentitiesOnly yesopção desativará esse comportamento.

Se você usa ssh como vários usuários para vários sistemas, recomendo colocar IdentitiesOnly yessua seção global de ssh_confige colocar cada um IdentityFilenas subseções Host apropriadas.

Responder3

Eu geralmente faço assim:

$ ssh -o IdentitiesOnly=yes -F /dev/null -i ~/path/to/some_id_rsa [email protected]

As opções são as seguintes:

  • -o IdentitiesOnly=yes- diz ao SSH para usar apenas chaves fornecidas por meio da CLI e nenhuma do $HOME/.sshou via ssh-agent
  • -F /dev/null- desabilita o uso de$HOME/.ssh/config
  • -i ~/path/to/some_id_rsa- a chave que você deseja usar explicitamente para a conexão

Exemplo

$ ssh -v -o IdentitiesOnly=yes -F /dev/null -i ~/my_id_rsa [email protected]
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /dev/null
debug1: Connecting to someserver.mydom.com [10.128.12.124] port 22.
debug1: Connection established.
debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA f5:60:30:71:8c:a3:da:a3:fe:b1:6d:0b:20:87:23:e1
debug1: Host 'someserver' is known and matches the RSA host key.
debug1: Found key in /Users/sammingolelli/.ssh/known_hosts:103
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to someserver.mydom.com ([10.128.12.124]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
Last login: Tue Dec  8 19:03:24 2015 from 153.65.219.15
someserver$

Observe na saída acima que sshapenas identificou a my_id_rsachave privada por meio da CLI e a utiliza para se conectar a algum servidor.

Especificamente estas seções:

debug1: identity file /Users/sammingolelli/my_id_rsa type 1
debug1: identity file /Users/sammingolelli/my_id_rsa-cert type -1

e:

debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/sammingolelli/my_id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Responder4

Use IdentityFile, mas continue usando ssh-agent para evitar solicitações de senha

A solução aceita de using IdentitiesOnly yessignifica que você nunca poderá aproveitar as vantagens do ssh-agent, resultando em solicitações repetidas de sua senha ao carregar sua chave.

Para continuar usando ssh-agente evitar os erros ‘Muitas falhas de autenticação’, tente isto:

  1. Remova todos os scripts de inicialização do console interativo que carregam chaves automaticamente no ssh-agent.

  2. adicione AddKeysToAgent yesà configuração ssh do seu cliente. Isso solicitará a senha na primeira conexão, mas depois adicionará a chave ao seu agente.

  3. use ssh-add -Dquando você receber erros de 'muitos autenticação'. Isso simplesmente 'redefine' (exclui) o cache do agente ssh. Em seguida, tente a conexão novamente na mesma sessão. Será solicitada uma senha e, uma vez aceita, ela será adicionada ao seu agente. Como você terá apenas uma chave em seu agente, você poderá se conectar. O ssh-agent ainda estará lá para conexões futuras durante a mesma sessão para evitar novas solicitações.

    Host ex example.com
       User joe
       HostName example.com
       PreferredAuthentications publickey,password
       IdentityFile /path/to/id_rsa
       AddKeysToAgent yes
    

informação relacionada