Почему я получаю «Отказано в доступе (publickey)» при попытке SSH с локального Ubuntu на сервер Amazon EC2?

218

У меня есть экземпляр приложения, работающего в облаке на экземпляре Amazon EC2, и мне нужно подключить его из моей локальной Ubuntu. Он отлично работает на одном из локальных Ubuntu, а также ноутбук. Я получил сообщение «Отказано в доступе (publickey)» при попытке доступа по SSH к EC2 в другой локальной Ubuntu. Это так странно для меня.

Я думаю, что есть какие-то проблемы с настройками безопасности на Amazon EC2, который имеет ограниченный доступ IP-адресов к одному экземпляру или сертификат может потребоваться для восстановления.

Кто-нибудь знает решение?

Vorleak Chy
источник
11
«Раньше работал» - до чего ?
womble
У меня есть экземпляр Elastic Beanstalk EC2. По состоянию на август 2013 года решением было получить доступ к экземпляру от имени пользователя ec2, из-за которого ошибка Permission Denied (publicKey) исчезла. А именно: ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. Конечно, вам нужно все остальное, как
описано
3
Вы получаете эту проблему, если вы указали неправильное имя пользователя. Документы aws ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ) в настоящее время приводят пример с именем пользователя ec2-user [ssh -i /path/my-key-pair.pem ec2-user @ ec2-198 -51-100-1.compute-1.amazonaws.com], в то время как мой (старый) ящик с Ubuntu имеет имя пользователя Ubuntu, поэтому, когда я использовал пример, я получил эту ошибку, переход на правильное имя пользователя разрешается.
david.barkhuizen
@ david.barkhuizen, твой комментарий мне помог. У меня была похожая проблема; оказалось, что это связано с именем пользователя. Благодарю.
NaijaProgrammer

Ответы:

143

Первое, что нужно сделать в этой ситуации, это использовать -vопцию ssh, чтобы вы могли увидеть, какие типы аутентификации пробовали и каков результат. Это помогает осветить ситуацию?

В своем обновлении на ваш вопрос, вы упоминаете "на другой локальной Ubuntu". Вы скопировали закрытый ключ ssh на другой компьютер?

Грег Хьюгилл
источник
2
Я скопировал закрытый ключ ssh на другую машину, как предложил @Greg. Это работает сейчас. Спасибо!
Vorleak Chy
3
К вашему сведению, вы можете использовать флаг -i, чтобы указать путь к ключам, не устанавливая их
Хорхе Варгас
20
В моем случае, я использовал Bitnami .ami и не понял , что вам нужно войти в систему, как вызываемый пользователь BitNami, как: ssh -i <keyfile> bitname@<ec2-address>. К сожалению, -vопция не помогла мне найти это, но все еще очень полезно проверить!
Мэтт Коннолли
7
ну, в моем случае я использовал неправильное имя пользователя. использовал «убунту» вместо «битнами». вот так: ssh -i key.pem bitnami @ hostaddress
Лукас Поттерский
3
Хорошим лидером является также и удаленный узел, посмотрите /var/log/auth.log, иногда вы увидите следующие сообщения: Authentication refused: bad ownership or modes for file /var/lib/jenkins/.ssh/authorized_keysили что-то еще
Jonas Libbrecht
76

Как явно не упоминалось, sshd по умолчанию очень строг в отношении прав доступа к authorized_keysфайлам. Так что , если authorized_keysесть запись для кого , кроме пользователя или может быть доступно для записи кто - либо , кроме пользователя, он будет отказываться от проверки подлинности (если SSHD не настроен StrictModes no)

Под словом «можно сделать доступным для записи» я подразумеваю, что, если любой из родительских каталогов доступен для записи кому-либо, кроме пользователя, пользователи, которым разрешено изменять эти каталоги, могут начать изменять разрешения таким образом, чтобы они могли изменять / заменять author_keys.

Кроме того, если /home/username/.sshкаталог не принадлежит пользователю и, следовательно, у пользователя нет прав на чтение ключа, вы можете столкнуться с проблемами:

drwxr-xr-x 7 jane jane 4096 Jan 22 02:10 /home/jane
drwx------ 2 root root 4096 Jan 22 03:28 /home/jane/.ssh

Обратите внимание, что Джейн не владеет .sshфайлом. Исправить это через

chown -R jane:jane /home/jane/.ssh

Такого рода проблемы с разрешениями файловой системы не будут отображаться ssh -v, и они даже не будут отображаться в журналах sshd (!), Пока вы не установите уровень журнала на DEBUG.

  • Редактировать /etc/ssh/sshd_config. Вы хотите строку, которая читает LogLevel DEBUGгде-то там. Перезагрузите сервер SSH, используя механизм, предоставленный дистрибутивом. ( service sshd reloadна RHEL / CentOS / Scientific.) Изящная перезагрузка не удалит существующие сессии.
  • Попробуйте авторизоваться снова.
  • Определите, куда попадают ваши журналы аутентификации, и прочитайте их. (IIRC, /var/log/auth.logо дистрибутивах на основе Debian; /var/log/secureна RHEL / CentOS / Scientific.)

Намного легче понять, что происходит с выводом отладки, который включает ошибки разрешения файловой системы. Не забудьте отменить изменение, /etc/ssh/sshd_configкогда закончите!

Кжетил Йоргенсен
источник
5
Это «можно сделать доступным для записи» - вот что меня
достало
7
FWIW правильные разрешения для ключевых файлов 600 (см. Здесь )
Мэтт Лайонс
1
Да, мой файл .authorized_keys был доступен для записи группой, поэтому он отказался принять.
Член парламента Адитья
2
Я бился головой о стену! Моя папка пользователя имела неправильные разрешения. Спасибо!
XJones
4
То же самое относится и к самой папке ~ / .ssh. Вы можете получить следующее сообщение об ошибке:Authentication refused: bad ownership or modes for directory
Евгений М.
37

Я получил эту ошибку, потому что я забыл добавить -lопцию. Мое локальное имя пользователя было не таким, как в удаленной системе.

Это не отвечает на ваш вопрос, но я попал сюда в поисках ответа на мою проблему.

pkmk
источник
25
ssh host -l userэто так же, как ssh user@host, верно?
Знаркус
3
@ Знаркус да, это то же самое.
Cregox
Да, это решило мою проблему, вызвав ошибку «Отказано в доступе (publickey)».
Брукс Моисей
1
Это была проблема для меня. Я ожидал, что пользователь "root" будет работать, но я использовал образ Ubuntu EC2, у которого по умолчанию был пользователь "ubuntu".
Керин
20

Я получил это сообщение о новом экземпляре, основанном на Ubuntu AMI. Я использовал опцию -i для предоставления PEM, но он по-прежнему отображал «Отказано в доступе (publickey)».

Моя проблема была в том, что я не использовал правильного пользователя. Запустив ssh с ubuntu @ ec2 ... он работал как обычно.


источник
Да ... Я управлял командой sudo, поэтому она не работала.
thaddeusmt
16

То, что легче читать, чем ssh -v(на мой взгляд, конечно), есть tail -f /var/log/auth.log. Это должно быть выполнено на сервере, к которому вы пытаетесь подключиться, пытаясь подключиться. Это покажет ошибки в текстовом виде.

Это помогло мне решить мою проблему:

Пользователь [username] из xx.yy.com не допускается, потому что ни одна из групп пользователей не указана в AllowGroups

Znarkus
источник
это журнал сервера. для RHEL / CentOS 7:tail -f /var/log/secure
Джанфранко П.
10

Проверьте ваш файл / etc / ssh / sshd_config . Там найдите строку, которая говорит

PasswordAuthentication no

Эта строка должна быть изменена, чтобы сказать да вместо нет. Кроме того, перезапустите сервер sshd после этого.

sudo /etc/init.d/ssh restart
Судипта Чаттерджи
источник
18
Это сделало бы сервер менее безопасным.
Знаркус
Это была проблема, с которой я столкнулся: я хотел создать учетную запись для другого пользователя, аутентифицируясь только с помощью пароля. Я также хотел быть в состоянии войти в систему как я сам из мест, где у меня не было моего личного ключа.
Даниэль
1
Как мы можем пойти /etc/ssh/sshd_config- если мы не можем даже попасть на сервер?
Kyo
Чтобы попасть на сам сервер, вы должны использовать файл PEM, который они выдавали при создании экземпляра. Инструкции идут после этого.
Судипта Чаттерджи
Это сработало для меня, хотя для перезапуска sshd требовалась следующая команда:sudo service sshd reload
pacoverflow
6

Возможно, не относится к текущему постеру, но может помочь тем, кто находит это при поиске ответов на подобные ситуации. Вместо того, чтобы позволить Amazon сгенерировать пару ключей ssh, я рекомендую загрузить собственный стандартный стандартный ssh-ключ по умолчанию в Amazon и указать его при запуске экземпляра EC2.

Это позволяет вам отбросить синтаксис типа «-i» в ssh, использовать rsync со стандартными параметрами, а также позволяет использовать один и тот же ключ ssh во всех регионах EC2.

Я написал статью об этом процессе здесь:

Загрузка личных ключей SSH в Amazon EC2
http://alestic.com/2010/10/ec2-ssh-keys

Эрик Хаммонд
источник
+1 Посмотрел этот вопрос именно по этой причине.
Джон Риселвато
я вижу эту ошибку в следующей вашей статье. region = $ (ec2-description-region | cut -f2) Необходимая опция '-K, --private-key KEY' отсутствует (-h для использования)
KashifAli
@KashifAli Вам нужно настроить учетные данные инструмента командной строки API EC2, чтобы вам не всегда приходилось передавать учетные данные в каждой командной строке.
Эрик Хаммонд
5

Странно, но моя проблема заключалась в том, что сервер был перезапущен и ему было выдано новое DNS-имя. Я использовал старое имя DNS. Я знаю, это звучит глупо, но мне потребовалось время, чтобы понять это.

Патрик Коллинз
источник
Спасибо! Это была именно моя проблема. Я не осознавал, что DNS-имя изменилось при перезапуске экземпляра.
Тим Сваст
В моем случае URL-адрес * .compute.amazonaws.com изменился, когда я назначил эластичный IP-адрес.
Джеффри Бут
2

Если вы пытаетесь подключиться к телефону CyanogenMod, работающему с Dropbear, вам следует запустить следующие строки, чтобы убедиться, что все права разрешены:

chmod 600 /data/dropbear/.ssh/authorized_keys

или же

chmod 700 /data/dropbear/.ssh/authorized_keys # In case of MacOS X 10.6-10.8

а также

chmod 755 /data/dropbear/ /data/dropbear/.ssh

Это исправило это для меня, иначе ничто не может соединиться.

Нафтули Кей
источник
msgstr "при попытке получить доступ к SSH к EC2 в другой локальной Ubuntu."
Grammargeek
1
Что если у меня нет авторизованных ключей ?
Игорь Ганапольский
2

Если вы используете CentOS 5, вы можете установить StrictModes noв /etc/ssh/sshd_config. Я разделяю / home каталог, используя NIS / NFS, и я правильно установил все разрешения, но он всегда запрашивал у меня пароль. После того, как я установил StrictModes no, проблема исчезла!

uichin
источник
1

В ответе Грега объясняется, как лучше его устранить, однако на самом деле проблема заключается в том, что у вас установлен ключ ssh на одной стороне транзакции (клиент), который пытается выполнить аутентификацию с открытым ключом, а не на основе пароля. Поскольку у вас нет соответствующего открытого ключа в экземпляре EC2, это не сработает.

Киан
источник
2
Как решить проблему?
Жюльен Гренье
1

У меня была та же самая проблема, и после попытки множества решений, которые не работали, я открыл порт SSH на брандмауэре моего маршрутизатора (панель управления брандмауэра моего маршрутизатора - беспорядок, поэтому трудно сказать, что происходит). Во всяком случае, это исправлено :)

Супер кровавый раздражает , что ошибка , которую вы получаете Отказано, подразумевая , что есть какая - то связь сделал, ГРР.

chichilatte
источник
1

У меня была та же проблема, хотя я, вероятно, следовал за всеми шагами, включая

$ ec2-authorize default -p 22

Тем не менее, я начал свою работу в регионе us-west-1. Таким образом, приведенная выше команда должна также указать это.

$ ec2-authorize default -p 22 --region us-west-1

После этой команды я смог войти в экземпляр. Я потратил немного времени, прежде чем понял проблему, и надеюсь, что этот пост поможет другим.

Аджит Верма
источник
0

Это редкий случай, но если у вас включен selinux и вы используете nfs для каталога с authorized_keys (например, общие домашние каталоги), вам нужно либо отключить selinux (не рекомендуется по соображениям безопасности, но вы можете временно отключить его). чтобы увидеть, вызывает ли это проблему) или разрешить selinux использовать домашние каталоги nfs. Я не знаю деталей, но у меня это сработало setsebool -P use_nfs_home_dirs 1

Reese
источник
0

Я только что столкнулся с той же проблемой после непреднамеренного добавления разрешений на групповую запись в домашний каталог пользователей.

Я обнаружил, что это было причиной, запустив tail -f /var/log/secureмашину и увидев ошибку Authentication refused: bad ownership or modes for directory /home/<username>.

Джейкоб Томлинсон
источник