O SSH é interrompido com muitas falhas de autenticação


26

Estou tentando executar esse script de provisionamento simples, mas encontro erros ao executar vagrant upe, em seguida, vagrant provisioncomandos.

Eu li que precisava criar um /etc/ansible/hostsarquivo, preenchendo-o com:

[vagrant]
192.168.222.111

Minha configuração SSH (alguns detalhes removidos):

Host default
HostName 127.0.0.1
User vagrant
Port 2222
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
PasswordAuthentication no
IdentityFile /Users/ashleyconnor/.vagrant.d/insecure_private_key
IdentitiesOnly yes
LogLevel FATAL

Host            server
HostName        XXX.XXX.XXX.XXX
User            ash
PreferredAuthentications publickey
IdentityFile    ~/.ssh/ash_ovh

Host            deployer
HostName        XXX.XXX.XXX.XXX
User            deployer
PreferredAuthentications publickey
IdentityFile    ~/.ssh/deployer_ovh

Host            bitbucket.org
PreferredAuthentications publickey
IdentityFile    ~/.ssh/bitbucket

Host            github.com
PreferredAuthentications publickey
IdentityFile    ~/.ssh/github

Host            staging
HostName        192.168.56.10
User            deployer
PreferredAuthentications publickey
IdentityFile    ~/.ssh/id_rsa

A saída SSH que estou recebendo parece agitar todas as minhas chaves:

<192.168.222.111> ESTABLISH CONNECTION FOR USER: vagrant
<192.168.222.111> REMOTE_MODULE setup
<192.168.222.111> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/Users/ashleyconnor/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'IdentityFile=/Users/ashleyconnor/.vagrant.d/insecure_private_key', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=vagrant', '-o', 'ConnectTimeout=10', '192.168.222.111', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1394317116.44-226619545527061 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1394317116.44-226619545527061 && echo $HOME/.ansible/tmp/ansible-tmp-1394317116.44-226619545527061'"]
fatal: [192.168.222.111] => SSH encountered an unknown error. The output was:
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /Users/ashleyconnor/.ssh/config
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 53: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/ashleyconnor/.ansible/cp/ansible-ssh-192.168.222.111-22-vagrant" does not exist
debug2: ssh_connect: needpriv 0
debug1: Connecting to 192.168.222.111 [192.168.222.111] port 22.
debug2: fd 3 setting O_NONBLOCK
debug1: fd 3 clearing O_NONBLOCK
debug1: Connection established.
debug3: timeout: 10000 ms remain after connect
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/ashleyconnor/.vagrant.d/insecure_private_key" as a RSA1 public key
debug1: identity file /Users/ashleyconnor/.vagrant.d/insecure_private_key type -1
debug1: identity file /Users/ashleyconnor/.vagrant.d/insecure_private_key-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.9p1 Debian-5ubuntu1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1 pat OpenSSH_5*
debug2: fd 3 setting O_NONBLOCK
debug3: load_hostkeys: loading entries for host "192.168.222.111" from file "/Users/ashleyconnor/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/ashleyconnor/.ssh/known_hosts:20
debug3: load_hostkeys: loaded 1 keys
debug3: order_hostkeyalgs: prefer hostkeyalgs: ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-rsa
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug2: kex_parse_kexinit: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa-cert-v01@openssh.com,ssh-rsa-cert-v00@openssh.com,ssh-rsa,ssh-dss-cert-v01@openssh.com,ssh-dss-cert-v00@openssh.com,ssh-dss
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-ripemd160-etm@openssh.com,hmac-sha1-96-etm@openssh.com,hmac-md5-96-etm@openssh.com,hmac-md5,hmac-sha1,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit: zlib@openssh.com,zlib,none
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: kex_parse_kexinit: ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: kex_parse_kexinit: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator.liu.se
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-sha2-256,hmac-sha2-256-96,hmac-sha2-512,hmac-sha2-512-96,hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit: none,zlib@openssh.com
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit:
debug2: kex_parse_kexinit: first_kex_follows 0
debug2: kex_parse_kexinit: reserved 0
debug2: mac_setup: found hmac-md5
debug1: kex: server->client aes128-ctr hmac-md5 zlib@openssh.com
debug2: mac_setup: found hmac-md5
debug1: kex: client->server aes128-ctr hmac-md5 zlib@openssh.com
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug2: dh_gen_key: priv key bits set: 119/256
debug2: bits set: 527/1024
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 50:db:75:ba:11:2f:43:c9:ab:14:40:6d:7f:a1:ee:e3
debug3: load_hostkeys: loading entries for host "192.168.222.111" from file "/Users/ashleyconnor/.ssh/known_hosts"
debug3: load_hostkeys: found key type RSA in file /Users/ashleyconnor/.ssh/known_hosts:20
debug3: load_hostkeys: loaded 1 keys
debug1: Host '192.168.222.111' is known and matches the RSA host key.
debug1: Found key in /Users/ashleyconnor/.ssh/known_hosts:20
debug2: bits set: 511/1024
debug1: ssh_rsa_verify: signature correct
debug2: kex_derive_keys
debug2: set_newkeys: mode 1
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug2: set_newkeys: mode 0
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /Users/ashleyconnor/.ssh/id_rsa (0x7fc212600540),
debug2: key: /Users/ashleyconnor/.ssh/bitbucket (0x7fc212600730),
debug2: key: /Users/ashleyconnor/.ssh/deployer (0x7fc212600a00),
debug2: key: /Users/ashleyconnor/.ssh/github (0x7fc212600c80),
debug2: key: /Users/ashleyconnor/.ssh/ash_ovh (0x7fc212601010),
debug2: key: /Users/ashleyconnor/.ssh/deployer_ovh (0x7fc2126011e0),
debug2: key: /Users/ashleyconnor/.vagrant.d/insecure_private_key (0x0), explicit
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred gssapi-with-mic,gssapi-keyex,hostbased,publickey
debug3: authmethod_lookup publickey
debug3: remaining preferred: ,gssapi-keyex,hostbased,publickey
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/ashleyconnor/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: /Users/ashleyconnor/.ssh/bitbucket
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: /Users/ashleyconnor/.ssh/deployer
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: /Users/ashleyconnor/.ssh/github
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: /Users/ashleyconnor/.ssh/ash_ovh
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: /Users/ashleyconnor/.ssh/deployer_ovh
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
Received disconnect from 192.168.222.111: 2: Too many authentication failures for vagrant

O vagrant sshcomando funciona bem.



Ligeiramente diferente. O Vagrant injeta sua chave quando você executa vagrant sshe essa pergunta envolve apenas autenticação sem chave.
Ash

2
Adicionando uma nota para outras pessoas pesquisando isso no Google. Os comutadores Cisco Nexus sofrem com o mesmo problema. Resolvido da mesma maneira como apontado por @HenkLangeveld abaixo:IdentitiesOnly=yes
Brett Lykins

Respostas:


37

De acordo com ssh-config(5), o ssh sempre tentará todas as chaves conhecidas pelo agente, além de qualquer arquivo de identidade:

 IdentitiesOnly
         Specifies that ssh(1) should only use the authentication identity files
         configured in the ssh_config files, even if ssh-agent(1) offers more
         identities.  The argument to this keyword must be “yes” or “no”.  This
         option is intended for situations where ssh-agent offers many different
         identities.  The default is “no”.

 IdentityFile
         Specifies a file from which the user's DSA, ECDSA or DSA authentication
         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.  ssh(1) will try
         to load certificate information from the filename obtained by
         appending -cert.pub to the path of a specified IdentityFile.

Para evitar isso, é necessário especificar IdentitiesOnly=yesalém da chave privada fornecida explicitamente.

Por exemplo, executando o sshcomando abaixo:

$ ssh -i /home/henk/.vagrant.d/insecure_private_key \
  vagrant@192.168.222.111 echo ok

produz:

Received disconnect from 192.168.222.111: 2: Too many authentication 
failures for vagrant

No entanto, executando o mesmo sshcomando e, além disso, especificando IdentitiesOnly=yes:

$ ssh -o IdentitiesOnly=yes \
  -i /home/henk/.vagrant.d/insecure_private_key vagrant@192.168.222.111 echo ok

produz:

ok

Edit: Removida suposição incorreta sobre a necessidade de adicionar a chave vagrant ao agente. Isso reduz a resposta à sua essência. Vamos ver se podemos encontrar uma duplicata ...
Henk Langeveld

3
Obrigada pelo esclarecimento! Ao usar um .ssh/configarquivo, a sintaxe está IdentitiesOnly yesnas Hostseções apropriadas .
Davil 18/05

Correto, ssh -o Option=Valuetorna-se Option Valueno arquivo de configuração.
Henk Langeveld 20/05

perdoe se a pergunta é muito básica, mas "IdentitiesOnly = yes" está no lado do servidor ou é um argumento a ser passado pelo cliente? Parece que o segundo ..
RollRoll

@ ThePoet De fato, o mencionou como uma sshopção do cliente.
Henk Langeveld

8

Portanto, eu tinha cinco chaves no meu ssh-agente, apesar da opção explícita de usar a chave ssh vagrant, ele ainda insistia em percorrer as chaves do meu agente antes de alcançar max_tries convenientemente antes de chegar à chave correta.

Para verificar se você tem esse problema: Execute ssh-add -l- se essa lista for> 5, você precisará remover as chaves ou desativar o agente.

Para corrigir: Execute ssh-add -d ~/.ssh/Xonde Xestá a chave que você deseja remover.


Depois de instalar o repositório mazer-rackham e com essas informações, pude reproduzir seu problema e adicionei uma alternativa: Verifique se a chave vagrant é conhecida pelo agente.
Henk Langeveld

Eu o adicionei ao agente, mas ainda precisava remover as chaves. Talvez a ordem que você adicionar ao agente seja importante? EDIT: Basta ler sua edição.
Ash

Eu tenho o mesmo problema, mas não entendo como você corrigiu isso? Eu não pode remover qualquer uma das teclas de minha ~/.ssh/pasta, eu preciso então
rubo77

Você não está removendo as chaves da sua ~.sshpasta - está removendo as chaves da ssh-agent daemon. Você sempre pode adicioná-los novamente mais tarde. Veja aqui para mais informações.
Ash

4

Depois de tentar todos os conselhos aqui sem êxito, reconheci que meu problema era o novo método de autenticação (GSSAPI), que sempre era malsucedido.

Eu resolvi isso editando o ~/.ssh/configarquivo:

Host *
  GSSAPIAuthentication no

Espero que isso ajude alguém também.


Isso parece constituir pelo menos um slot! Minha configuração com 5 teclas via ssh-agent funciona novamente. Eu acho que ele falhará com 6 teclas, no entanto ...
Robert Siemer

2

Seu ssh-agent possui mais chaves do que o servidor ssh permite tentativas de autenticação ("MaxAuthTries", padrão: 6).

Observe que alguns ssh-agents, em particular o GNOME Keyring, carregam automaticamente todas as chaves encontradas em ~ / .ssh, e que essas chaves não podem ser descarregadas com "ssh-add - [dD]".

Aqui estão algumas soluções:

  • Você já configurou a chave correta em seu ~ / .ssh / config, para não precisar do agente. Faça o cliente ignorar o agente, por exemplo, unset SSH_AUTH_SOCKou use "IdentitiesOnly = yes", como @ henk-langeveld sugeriu
  • Mova algumas chaves para fora de ~ / .ssh (um subdiretório como ~ / .ssh / noauto também funciona) para impedir que elas sejam carregadas automaticamente. Você ainda pode adicioná-los manualmente se precisar deles.
  • Aumente "MaxAuthTries" no lado do servidor, o número de tentativas de autenticação permitidas

2

Para evitar isso, podemos ssh usando, -o 'IdentitiesOnly yes'por exemplo,ssh -i privateKey -o 'IdentitiesOnly yes' user@host

Como alternativa, podemos adicionar as seguintes linhas ao arquivo ~ / .ssh / config

Host *
IdentitiesOnly yes

1

Para conectar o servidor usando o comando quick fix:

ssh -o IdentitiesOnly=yes -i ~/.ssh/private_key_or_pem_file_name server_user_name@ip_OR_hostname echo ok

A maneira recomendada é mencionada abaixo:

Mas se você possui capistrano receipes ou outros softwares que estão conectando o servidor ssh, é necessário corrigir da maneira correta, conforme mencionado abaixo:

No arquivo ~ / .ssh / config, mencione a opção "IdentitiesOnly yes" na configuração do servidor

Host server_domain_OR_ip server_name_your_choice
    User server_user_name
    Hostname server_domain_OR_ip
    RSAAuthentication yes
    Compression yes
    IdentityFile ~/.ssh/private_key_OR_pem_file
    IdentitiesOnly yes
    Port 22

private_key_OR_pem_file: No caso do arquivo pem, mencione a extensão também ".pem"


1

Corri para esse mesmo erro ao tentar executar um manual ansible. Acabei fornecendo a opção IdentitiesOnly ssh usando --ssh-extra-args:

ansible-playbook -i ../.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory playbook.yml --ssh-extra-args="-o IdentitiesOnly=yes"

0

A mensagem principal é

Received disconnect from 192.168.222.111: 2: 
    Too many authentication failures for vagrant

Você copiou a saída vagrant ssh-config como o host padrão, .ssh/configmas foi ignorada porque possui parâmetros conflitantes (nome do host, porta). Sem entrada correspondente, o ssh tentará todas as chaves que encontrar.

Teste a tentativa ssh novamente com a -iopção

$ ssh -i $HOME/.vagrant.d/insecure_private_key vagrant@192.168.222.111 echo ok

Acredito que é assim que você especificaria isso no Inventário Ansible:

[vagrant]
192.168.222.111 ansible_ssh_private_key_file=/.../.vagrant.d/insecure_private_key

Abreviou o caminho da legibilidade


Resposta original:

Compare a saída de vagrant ssh-configcom a entrada vaga no seu .ssh/config. Verifique se o caminho da chave privada é uma correspondência exata.

Verifique também se o arquivo de chave não pode ser acessado por nenhuma outra conta. Nós todos sabemos o que essa chave é, mas SSH não sabe essa coisa é de conhecimento público, e tenta nos proteger utilizando as teclas que podem ser comprometidos.


Originalmente, copiei a configuração, vagrant ssh-configmas verifiquei novamente e é idêntica. Também posso cat /Users/ashleyconnor/.vagrant.d/insecure_private_keye tenho permissões adequadas.
Ash

Verifique se ninguém mais pode ler ou gravar o arquivo.
Henk Langeveld

1
Somente eu tenho permissões rw. Sem sorte nas outras sugestões, eu tentei correr ssh -i $HOME/.vagrant.d/insecure_private_key -l vagrant 192.168.222.111ainda obterReceived disconnect from 192.168.123.123: 2: Too many authentication failures for vagrant
Ash

O host remoto tem um usuário vagrant?
Henk Langeveld

Sim. Quando eu executo vagrant sshele se conecta como vagabundo usuário
Ash
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.