У меня проблемы с использованием авторизованных ключей для входа по SSH на удаленный сервер. Сообщения об ошибках, которые я получаю, выглядят так:
OpenSSH_5.2p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to xx.xx.xx [xxx.xx.xx.xx] port 22.
debug1: Connection established.
debug3: Not a RSA1 key file /Users/bfenker/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
...
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /Users/bfenker/.ssh/id_rsa type 1
ssh_exchange_identification: Connection closed by remote host
Другие вопросы на этом сайте содержали похожие вопросы, и решение обычно заключалось в двойной проверке всех разрешений на стороне клиента, что я и сделал:
drwxr-xr-x+ 23 bfenker staff 782 May 8 11:02 bfenker
drwx------ 8 bfenker staff 272 May 8 10:05 .ssh
-rw------- 1 bfenker staff 1675 May 8 09:51 id_rsa
-rw-r--r-- 1 bfenker staff 418 May 8 09:51 id_rsa.pub
-rw------- 1 bfenker staff 999 May 8 09:46 identity
-rw-r--r-- 1 bfenker staff 663 May 8 09:46 identity.pub
-rw-r--r-- 1 bfenker staff 416 May 8 09:06 known_hosts
Я могу использовать авторизованный ключ для SSH на другом сервере и с этого сервера SSH на сервер, который мне нужен. Это приемлемый обходной путь, который я пытаюсь исправить, но я думаю, что он также показывает, что и мой клиент, и сервер настроены нормально.
Обратите внимание, что когда я успешно подключаюсь по SSH к другому серверу, я получаю те же сообщения об ошибках, но, похоже, восстанавливается, начиная со строк:
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
Кто-нибудь знает, почему это работает в некоторых случаях, но не в том случае, если я хочу? Будем очень признательны за любые другие предложения!
Necroquestion! Основываясь на том факте, что вы можете использовать этот ключ для входа на другой сервер, @ michael-hampton находится на правильном пути: на конечном сервере есть что-то (firewall / tcp wrappers / sshd config), что запрещает доступ. Все эти разговоры о неправильных форматах ключей - отвлекающий маневр, основанный на неправильной интерпретации отладочной информации. Линия
debug1: identity file /Users/bfenker/.ssh/id_rsa type 1
указывает, что ssh смог понять ключ.
Ваш SSH-ключ хранится в неправильном формате. OpenSSH использует ключи, которые помещаются в одну строку. Тебе нужно ssh-keygen
с участием -i
и -m
варианты см. man ssh-keygen
. Наверное, один из них:
ssh-keygen -m RFC4716 -i -f /Users/bfenker/.ssh/id_rsa
Использовать вывод как новый ключевой файл (ssh-keygen ... >newkeyfile
).
Изменить 1:
Обратите внимание на следующее: "Эта опция будет читать незашифрованный файл закрытого (или открытого) ключа "
Поэтому, вероятно, файл должен быть изменен на файл без парольной фразы программой, которая понимает этот формат.
Я чувствую, что ответы здесь не очень ясны. Ответ Марка Вагнера покрывает это, но не полностью объясняет ситуацию.
Строки в выводе имеют префиксы с их уровнями отладки, что также дает подсказку об их значимости: но меньшие числа имеют большее значение. В debug3:
вещи намного менее важны, чем debug1:
Когда файл ключа читается, ssh сначала пытается проанализировать его как устаревший ключ RSA (теперь называемый «RSA1»), эти ключи начинаются с SSH PRIVATE KEY FILE FORMAT
и номер версии. Все новые ключи RSA начинаются -----BEGIN RSA PRIVATE KEY-----
. Вот попытка входа в систему, где identity
это старый ключ стиля RSA1 и id_rsa
это новый стиль.
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/identity type 0
debug1: identity file /home/user/.ssh/identity-cert type -1
debug3: Not a RSA1 key file /home/user/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
[...]
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /home/user/.ssh/id_rsa type 1
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type -1
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1
На этом этапе он определил ключевые типы файлов. identity
так как type 0
и id_rsa
так как type 1
. Другие файлы, которые он проверяет, не существуют и поэтому type -1
.
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.3
Поскольку это протокол 2, ключ RSA протокола 1 в identity
будут проигнорированы во время обмена ключами.
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug2: key: /home/user/.ssh/id_rsa (0x5622d77426a0)
debug2: key: /home/user/.ssh/id_dsa ((nil))
debug2: key: /home/user/.ssh/id_ecdsa ((nil))
Здесь он напоминает нам о ключевых файлах, которые он хочет использовать. Не уверен, почему он не отклонил отсутствующие файлы, только файл протокола 1, но ...
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
[...]
debug1: Next authentication method: publickey
debug1: Offering public key: /home/user/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug3: Wrote 372 bytes for a total of 1689
debug1: Server accepts key: pkalg ssh-rsa blen 277
И здесь он предлагает id_rsa
ключ и принято.
Короче говоря, проблема в заголовке вопроса - отвлекающий маневр, связанный с тем, что ssh пытается разными способами проанализировать найденные ключи, а не настоящая проблема с ключом.
Сначала вы должны проверить свои журналы sshd. т.е.
less /var/log/secure
В зависимости от дистрибутива unix файл с журналом безопасности может отличаться. Но когда вы найдете, он должен указать причину, по которой вы не можете войти.
Я тоже недавно столкнулся с этой проблемой. В моем случае все разрешения были правильными, включая .ssh, файл rsa, домашний каталог и все, что связано с пользователем. Проблема заключалась в том, что у меня был ранее сгенерированный открытый ключ в .ssh, который не соответствовал закрытому ключу, который я использовал для входа в систему. Удаление открытого ключа из .ssh решило проблему.
Я использовал ssh-keygen для создания каталога .ssh, который привел к этому ключу pub и, следовательно, к проблеме.
У меня была такая же проблема на моем MacBook Pro с MacOS 10.7.5. С моими ключами все было в порядке, просто они зашифрованы (с парольной фразой, как и предполагалось вам) и не были правильно расшифрованы с помощью ssh. Кажется, что ssh-agent
есть проблемы.
В соответствии с Эта статья, попробуй это:
Ставить /usr/bin/ssh-agent
в ваших элементах входа (Системные настройки -> Пользователи и группы -> выберите пользователя -> Элементы входа). Ужасно сложно перейти к /usr/bin
в диалоговом окне, поэтому в статье предлагается сделать ссылку в вашем домашнем каталоге (ln -s /usr/bin/ssh-agent
), который вы можете удалить, поместив его в элементы входа.
Закройте Terminal.app
Перезагрузите машину.
Откройте Терминал и повторите команду ssh.
Сработало у меня (по крайней мере, однажды).