Почему-то мой SSH никогда не хочет спрашивать у меня пароль.
Итак, я настроил VPS на каком-то случайном сервере где-то в мире и хочу подключиться к нему по SSH.
Я могу настроить ключ, но когда я делаю это:
ssh -l some-user IP
Я получаю ошибку:
Received disconnect from ##.##.##.##: 2: Too many authentication failures for some-user
Когда я смотрю на подробности, я вижу, что пароль — это один из вариантов:
debug1: Offering RSA public key: some-user@computer
debug1: Authentications that can continue: publickey,password
Но SSH никогда не спрашивает у меня пароль. Он пытается 5 раз, как я подозреваю, с помощью метода publickey, а затем терпит неудачу. Почему бы ssh не попробовать с паролем?!
На всякий случай, мой файл ssh_config имеет:
PasswordAuthentication yes
Полный журнал
ssh -v -l root ##.##.##.##
OpenSSH_6.1p1 Debian-4, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /home/someuser/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to ##.##.##.## [##.##.##.##] port 22.
debug1: Connection established.
debug1: identity file /home/someuser/.ssh/id_rsa type 1
debug1: Checking blacklist file /usr/share/ssh/blacklist.RSA-2048
debug1: Checking blacklist file /etc/ssh/blacklist.RSA-2048
debug1: identity file /home/someuser/.ssh/id_rsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_dsa type -1
debug1: identity file /home/someuser/.ssh/id_dsa-cert type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa type -1
debug1: identity file /home/someuser/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.2p2 Ubuntu-6
debug1: match: OpenSSH_6.2p2 Ubuntu-6 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.1p1 Debian-4
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: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ECDSA XX:XX:...:XX:XX
debug1: Host '##.##.##.##' is known and matches the ECDSA host key.
debug1: Found key in /home/someuser/.ssh/known_hosts:38
debug1: ssh_ecdsa_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,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/someuser/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
debug1: Authentications that can continue: publickey,password
debug1: Offering RSA public key: someuser@computer
Received disconnect from ##.##.##.##: 2: Too many authentication failures for root
решение1
Попробуйте войти в систему с отключенной аутентификацией с открытым ключом, используя
ssh -o PubkeyAuthentication=no root@newserver
решение2
identityfile
Скорее всего, в вашем файле более одной строки .ssh/config
.
Даже если у вас есть identityfile
под host
конфигурацией, он применяется глобально. Это означает, что он ssh
пробует каждый файл идентификации (т. е. открытый ключ) на каждом хосте, прежде чем запросит пароль с сервера.
Вы можете это исправить
- Удаление всех
identityfile
строк, кроме одной, или - Добавление
PubkeyAuthentication no
к.ssh/config
, или - Выполнение ssh с
-o PubkeyAuthentication=no
параметром.
От man 5 ssh_config
:
PubkeyAuthentication
Specifies whether to try public key authentication. The argument to this
keyword must be “yes” or “no”. The default is “yes”. This option applies
to protocol version 2 only.
IdentityFile
...
It is possible to have multiple identity files specified in configuration
files; all these identities will be tried in sequence. Multiple
IdentityFile directives will add to the list of identities tried (this
behaviour differs from that of other configuration directives).
Некоторые общие инструкции по работе с открытыми ключами:
- В общем случае вам следует иметь только один закрытый ключ на клиента (рабочую станцию) и поместить соответствующий открытый ключ на все серверы, к которым клиент должен иметь доступ. Другими словами, разделяйте открытый ключ между серверами и никогда не используйте один и тот же закрытый ключ на нескольких устройствах.
- Всегда генерируйте пару ключей на вашем устройстве и передавайте только открытый ключ. Таким образом, даже если сервер будет скомпрометирован, ваш закрытый ключ останется в безопасности. Это может произойти неожиданными способами — например, через резервное копирование.
- Если кто-то другой администрирует сервер,тыдолжны предоставить им открытый ключ; они должнынетсгенерировать пару ключей и отправить вам закрытый ключ. Таким образом, они не смогут выдать себя за вас с вашим ключом (конечно, обычно они могут делать все, что захотят). Кроме того, с открытым ключом должна быть защищена только целостность (т. е. никто не изменил открытый ключ); с закрытым ключом должна быть сохранена конфиденциальность (т. е. никто другой не получил ключ), и невозможно быть абсолютно уверенным, что он не был скомпрометирован.
- Взлом сервера не ставит под угрозу другие серверы, даже если вы используете один и тот же закрытый ключ для подключения к нескольким серверам (за исключением случаев, когда вы передали этот закрытый ключ на сервер. Никогда так не делайте).
- Взлом вашей рабочей станции в любом случае раскроет ваши закрытые ключи. Наличие нескольких закрытых ключей не поможет в этом (за исключением случаев, когда у вас есть разные, надежные парольные фразы, и не все из них доступны злоумышленнику).
Есть некоторые исключения, но их не так уж много.
решение3
Ваш локальный ssh не должен спрашивать у вас пароль, а вот ssh-сервер на другом конце должен. Вероятно, сервер настроен так, чтобы не принимать аутентификацию по паролю. Мой тоже не будет спрашивать у вас пароль.
решение4
Я нашел еще одну причину. У меня было:
Host *
PreferredAuthentications publickey
в ~/.ssh/config
(скопировано у другого пользователя, думая, что это "предпочтение"). На самом деле PreferredAuthentications
указывает "разрешенные" методы и порядок.
Либо удалите PreferredAuthentications
строку, либо добавьтеpassword
Host *
PreferredAuthentications publickey,password
Примечание: после запятой пробел не ставится!