SSH прерывается из-за слишком большого количества ошибок аутентификации

26

Я пытаюсь запустить этот простой сценарий инициализации, но я сталкиваюсь с ошибками при запуске, vagrant upа затем с vagrant provisionкомандами.

Я прочитал, что мне нужно создать /etc/ansible/hostsфайл, который я сделал, заполнив его:

[vagrant]
192.168.222.111

Мой конфиг SSH (некоторые детали удалены):

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

Вывод SSH, который я получаю, кажется, проходит через все мои ключи:

<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

Команда vagrant sshотлично работает.

ясень
источник
Возможное дублирование: serverfault.com/questions/139870/…
Хенк Лангевельд
Немного отличается. При запуске Vagrant вводит ключ, vagrant sshи этот вопрос касается только аутентификации без ключа.
Эш
2
Добавление заметки для других людей Googling это. Коммутаторы Cisco Nexus страдают от этой же проблемы. Решено так же, как указано @HenkLangeveld ниже:IdentitiesOnly=yes
Бретт Лайкинс

Ответы:

37

Согласно ssh-config(5)ssh всегда пробует все ключи, известные агенту, в дополнение к любым файлам идентификации:

 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.

Чтобы предотвратить это, необходимо указать IdentitiesOnly=yesв дополнение к явно предоставленному закрытому ключу.

Например, запустив sshкоманду ниже:

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

производит:

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

Однако, запустив ту же sshкоманду и, кроме того, указав IdentitiesOnly=yes:

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

производит:

ok
Хенк Лангевельд
источник
Изменить: Убрано неверное предположение о необходимости добавить бродячий ключ к агенту. Это сводит ответ к его сути. Посмотрим, сможем ли мы найти дубликат ...
Хенк Лангевельд,
3
Спасибо за объяснение! При использовании .ssh/configфайла синтаксис находится IdentitiesOnly yesв соответствующих Hostразделах.
Давил
Поправьте, ssh -o Option=Valueделается Option Valueв файле конфигурации.
Хенк Лангевельд
простите, если вопрос слишком простой, но "IdentitiesOnly = yes" на стороне сервера или аргумент для передачи от клиента? Похоже на второе ..
RollRoll
@ThePoet Действительно, упомянул это как sshвариант клиента.
Хенк
8

Таким образом, у меня было 5 ключей, ssh-agentи, несмотря на явную возможность использования ключа vagrant ssh, он по-прежнему настаивал на циклическом переключении ключей в моем агенте до удобного достижения max_tries, прежде чем перейти к нужному ключу.

Чтобы проверить, есть ли у вас эта проблема: Запустите ssh-add -l- если этот список> 5, вам нужно удалить ключи или отключить агент.

Чтобы исправить: Запустите, ssh-add -d ~/.ssh/Xгде Xключ, который вы хотите удалить.

ясень
источник
После установки репозитория mazer-rackham и с этой информацией я смог воспроизвести вашу проблему и добавил альтернативу: Убедитесь, что ключ vagrant известен агенту.
Хенк Лангевельд,
Я добавил его в агент, но все равно пришлось удалить ключи. Может, порядок, который вы добавляете к агенту, имеет значение? РЕДАКТИРОВАТЬ: Просто прочитайте ваши изменения.
Ash
У меня та же проблема, но я не понимаю, как вы это исправили? Я не могу удалить какие-либо ключи из своей ~/.ssh/папки, мне нужно
rubo77
Вы не удаляете ключи из своей ~.sshпапки - вы удаляете ключи из ssh-agent daemon. Вы всегда можете добавить их позже. Смотрите здесь для получения дополнительной информации.
Эш
4

После того, как я безуспешно попробовал все советы, я понял, что моей проблемой был новый метод аутентификации (GSSAPI), который всегда был неудачным.

Я решил это, отредактировав ~/.ssh/configфайл:

Host *
  GSSAPIAuthentication no

Надеюсь, это кому-то тоже поможет.

Питер
источник
Похоже, это составляет хотя бы один слот! Моя установка с 5 ключами через ssh-agent снова работает. Я предполагаю, что это потерпит неудачу с 6 ключами, хотя ...
Роберт Симер
2

Ваш ssh-агент содержит больше ключей, чем сервер ssh разрешает попытки аутентификации («MaxAuthTries», по умолчанию: 6).

Обратите внимание, что некоторые ssh-агенты, в частности набор ключей GNOME, автоматически загружают все ключи, которые они находят в ~ / .ssh, и что эти ключи не могут быть выгружены с помощью «ssh-add - [dD]».

Вот несколько решений:

  • Вы уже настроили правильный ключ в вашем ~ / .ssh / config, поэтому вам не нужен агент. Заставьте клиента игнорировать агента, например, unset SSH_AUTH_SOCKили используйте «IdentitiesOnly = yes», как предложено @ henk-langeveld
  • Переместите некоторые ключи из ~ / .ssh (также работает подкаталог ~ / .ssh / noauto), чтобы они не загружались автоматически. Вы все еще можете ssh-добавить их вручную, если они вам нужны.
  • Увеличьте «MaxAuthTries» на стороне сервера, количество разрешенных попыток аутентификации
Нильс Тёдтманн
источник
2

Чтобы предотвратить это, мы можем использовать ssh, -o 'IdentitiesOnly yes'например:ssh -i privateKey -o 'IdentitiesOnly yes' user@host

В качестве альтернативы, мы можем добавить следующие строки в файл ~ / .ssh / config

Host *
IdentitiesOnly yes
Джасодип Чаттерджи
источник
1

Чтобы подключиться к серверу с помощью команды быстрого исправления:

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

Рекомендуемый способ указан ниже:

Но если у вас есть рецепты Capistrano или другие программы, которые подключают ваш ssh-сервер, вы должны исправить это должным образом, как указано ниже:

В файле ~ / .ssh / config упомяните опцию «IdentitiesOnly yes» в конфигурации вашего сервера.

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: в случае расширения файла pem упомянутое расширение тоже ".pem"

Таймур Чангайз
источник
1

Я столкнулся с той же ошибкой, пытаясь запустить ANSIBLE PlayBook. В итоге я предоставил опцию IdentitiesOnly ssh, используя --ssh-extra-args:

ansible-playbook -i ../.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory playbook.yml --ssh-extra-args="-o IdentitiesOnly=yes"
strictlyk3v
источник
0

Ключевое сообщение

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

Вы скопировали вывод vagrant ssh-config в качестве хоста по умолчанию, .ssh/configно это пропускается, поскольку у него есть конфликтующие параметры (имя хоста, порт). Без соответствующей записи ssh просто попробует все ключи, которые сможет найти.

Протестируйте попытку ssh снова с -iопцией

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

Я полагаю, что именно так вы могли бы указать это в Ansible Inventory:

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

Сокращенный путь для удобочитаемости


Оригинальный ответ:

Сравните вывод vagrant ssh-configс бродячей записью в вашем .ssh/config. Убедитесь, что путь к закрытому ключу точно совпадает.

Также убедитесь, что файл ключа не доступен для любых других учетных записей. Мы все знаем, что это за ключ, но SSH не знает, что это общедоступное знание, и пытается защитить нас от использования ключей, которые могут быть скомпрометированы.

Хенк Лангевельд
источник
Изначально я скопировал конфиг, vagrant ssh-configно я проверил еще раз, и он идентичен. Я также могу cat /Users/ashleyconnor/.vagrant.d/insecure_private_keyи иметь соответствующие разрешения.
Ash
Убедитесь, что никто не может прочитать или записать файл.
Хенк Лангевелд,
1
Только у меня есть права доступа. Не повезло с другими предложениями, я пытался бежать, ssh -i $HOME/.vagrant.d/insecure_private_key -l vagrant 192.168.222.111продолжая получатьReceived disconnect from 192.168.123.123: 2: Too many authentication failures for vagrant
Ash
Есть ли у удаленного хоста пользователь vagrant?
Хенк Лангевелд,
Да. Когда я запускаю, vagrant sshон подключается как пользователь vagrant
Ash