Проблема доступа AWS ssh «Отказано в доступе (publickey)» [закрыто]


284

Как подключиться к экземпляру AWS через ssh?

У меня есть:

  1. Зарегистрирован в AWS;
  2. Создали открытый ключ и сертификат на веб-сайте AWS и сохранили их на диск;
  3. Зашел на мою консоль и создал переменные окружения:

    $ export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/
    $ export EC2_CERT=/home/default/aws/cert-EBAINCRNWHDSCWWIHSOKON2YWGJZ5LSQ.pem
    $ export EC2_PRIVATE_KEY=/home/default/aws/pk-EBAINCRNWHDSCWWIHSOKON2YWGJZ5LSQ.pem
    
  4. Сказал API AWS использовать эту пару ключей и сохранил ее в файл:

    $ ec2-add-keypair ec2-keypair > ec2-keypair.pem
    
  5. Запустил экземпляр AWS Ubuntu 9, используя эту пару ключей:

    $ ec2-run-instances ami-ed46a784 -k ec2-keypair
    
  6. Попытка установить ssh-соединение с экземпляром:

    $ ssh -v -i ec2-keypair.pem ubuntu@ec2-174-129-185-190.compute-1.amazonaws.com
    OpenSSH_5.1p1 Debian-5ubuntu1, OpenSSL 0.9.8g 19 Oct 2007
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: Applying options for *
    debug1: Connecting to ec2-174-129-185-190.compute-1.amazonaws.com [174.129.185.190] port 22.
    debug1: Connection established.
    debug1: identity file ec2-keypair.pem type -1
    debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5ubuntu1
    debug1: match: OpenSSH_5.1p1 Debian-5ubuntu1 pat OpenSSH*
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_5.1p1 Debian-5ubuntu1
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-cbc hmac-md5 none
    debug1: kex: client->server aes128-cbc hmac-md5 none
    debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
    debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
    debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
    debug1: Host 'ec2-174-129-185-190.compute-1.amazonaws.com' is known and matches the RSA host key.
    debug1: Found key in /home/default/.ssh/known_hosts:11
    debug1: ssh_rsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey
    debug1: Next authentication method: publickey
    debug1: Trying private key: ec2-keypair.pem
    debug1: read PEM private key done: type RSA
    debug1: Authentications that can continue: publickey
    debug1: No more authentication methods to try.
    Permission denied (publickey).
    

    В чем может быть проблема и как заставить это работать?


2
Иронично то, что я использую «root» в качестве имени пользователя, но «ubuntu» (то, что вы упомянули) - правильное имя для моего AMI, и спасибо за ваш пост!
Realjin

Ответы:


512

Для экземпляров Ubuntu:

chmod 600 ec2-keypair.pem
ssh -v -i ec2-keypair.pem ubuntu@ec2-174-129-185-190.compute-1.amazonaws.com

В других случаях вам, возможно, придется использовать ec2-userвместо ubuntu.

В большинстве образов EC2 Linux, которые я использовал, по умолчанию создается только пользователь root.

Смотрите также: http://www.youtube.com/watch?v=WBro0TEAd7g


6
Ты жжешь! Так чертовски просто!
Алекс

50
Вы также можете использовать ssh-add ec2-keypair.pem, чтобы отключить опцию -i
AdamK

12
если вы попробуете root, и вы получите «Пожалуйста, войдите как пользователь ec2, а не как пользователь root.» »используйте ec2-user вместо root.
Тони

8
И некоторые образы Ubuntu, кажется, имеют только пользователя "Ubuntu". (Который может судить.)
Проф. Фалькен

1
Супер, супер полезно.
NSCoder

93

Теперь это:

ssh -v -i ec2-keypair.pem ec2-user@[yourdnsaddress]

Спасибо. Мне понадобилось много времени, чтобы это выяснить - это не упоминается в информации о подключении с консоли! Он говорит вам, когда вы пытаетесь использовать root, но я подумал, что ec2-user - это ссылка на мое имя пользователя. Doh!
Адриан Муат

1
О чувак. Не легко найти лакомый кусочек. Спасибо!
vroomfondel

спасибо, не легко найти это

Очень хорошо! Спасибо!
Виана

46

Релизы Canonical по умолчанию используют пользователя 'Ubuntu' для любого, кто приземлится здесь с изображением Ubuntu, которое сталкивается с той же проблемой.


2
Не легко найти это.
Густав


8

Для моих образов Ubuntu, это на самом деле пользователь Ubuntu, а не пользователь ec2;)


5

Ubuntu 10.04 с openSSH

это точное использование:

ssh -v -i [yourkeypairfile] ec2-user@[yourdnsaddress]

например:

ssh -v -i GSG_Keypair.pem ec2-user@ec2-184-72-204-112.compute-1.amazonaws.com

Приведенный выше пример был взят непосредственно из учебника AWS для подключения к машине Linux / UNIX по адресу: http://docs.amazonwebservices.com/AWSEC2/latest/GettingStartedGuide/


С ключом ssh -i мы можем использовать только файл .pem.
ABHAY JOHRI

5

Он также будет жаловаться, если права доступа к файлу pem слишком открыты. CHMOD файл до 600, чтобы исправить это.


Спасибо за этот совет - мне очень помогли
Билли Мун

4
Для новичков .. команда сделать это будет:chmod 600 your_file.pem
Дано

5

Я также столкнулся с этим - оказывается, я использовал созданный сообществом AMI - и именем пользователя по умолчанию было niehter root, а также ect-user или ubuntu. На самом деле, я понятия не имел, что это было - пока я не попробовал « root », и сервер любезно попросил меня войти в систему как xxx, где xxx - это то, что он говорит вам.

-cheers!


4

Вам нужен личный ключ на вашем локальном компьютере

Вам нужно знать IP-адрес или DNS-имя вашего удаленного компьютера или сервера, вы можете получить его из консоли AWS

Если вы пользователь Linux

  • Убедитесь, что разрешения для закрытого ключа 600 ( chmod 600 <path to private key file>)
  • Подключитесь к вашей машине с помощью ssh ( ssh -i <path to private key file> <user>@<IP address or DNS name of remote server>)

Если вы пользователь Windows

  • Используйте PuTTy для создания сеанса ssh ( http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.66-installer.exe )
  • Если ваш файл закрытого ключа в формате .pem, преобразуйте его в .ppk, используя puttygen
  • Запустите PuTTy, установите ppk-файл, IP-адрес или DNS-имя удаленного сервера и запустите сеанс ssh.

Измените разрешение файла с помощью chmod 400 <ключ pem>
Vaibhav Jain

3

использовать ...

# chmod 400 ec2-keypair.pem

не используйте разрешение 600, иначе вы можете случайно перезаписать свой ключ.


2

это сработало для меня:

ssh-keygen -R <server_IP>

удалить старые ключи, хранящиеся на рабочей станции, также работает вместо

затем снова сделал то же самое ssh:

ssh -v -i <your_pem_file> ubuntu@<server_IP>

в экземплярах Ubuntu имя пользователя: ubuntu в Amazon Linux AMI имя пользователя: ec2-user

Мне не нужно было заново создавать экземпляр из изображения.



2

Есть 2 шага для подключения:

Chmod 400 на ваш закрытый ключ, как остальные, не могут получить доступ к вашему ключу:

chmod 400 toto.pem

Чтобы подключиться к вашему экземпляру в SSH, вам нужно знать публичный IP-адрес вашего экземпляра:

ssh -i toto.pem ec2-user@XX.XX.XX.XXX

Надеюсь, поможет !


1

Если вы используете EBS, вы также можете попробовать смонтировать том EBS на работающем экземпляре. Затем смонтируйте его на этом работающем экземпляре и посмотрите, что происходит в / home. Вы можете видеть такие вещи, как пользователь ubuntu или ec2-user? или он имеет правильные открытые ключи в ~ / .ssh / authorized_keys


1

Разрешение на ec2-keypair.pemдолжно быть400

chmod 400 ec2-keypair.pem


1

Если у вас запущен образ AWS из Битнами. Имя пользователя будет битнами. Ура!

посмотрите мой отладчик и посмотрите на последний:

*

ssh -v -i awsliferaysrta.pem.txt root@54.254.250.***
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 54.254.250.*** [54.254.250.***] port 22.
debug1: Connection established.
debug1: identity file awsliferaysrta.pem.txt type -1
debug1: identity file awsliferaysrta.pem.txt-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.1
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH_5*
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: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 05:5c:78:45:c9:39:3a:84:fe:f8:19:5d:31:48:aa:5f
debug1: Host '54.254.250.***' is known and matches the RSA host key.
debug1: Found key in /Users/macbookpro/.ssh/known_hosts:2
debug1: ssh_rsa_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
debug1: Next authentication method: publickey
debug1: Trying private key: awsliferaysrta.pem.txt
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
Authenticated to 54.254.250.*** ([54.254.250.***]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: Remote: Port forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Forced command.
debug1: Sending environment.
debug1: Sending env LANG = en_US.UTF-8
Please login as the user "bitnami" rather than the user "root".

*


1

В моем случае (Mac OS X) проблема была в типе прерывания файла. Попробуй это:

1.- Откройте файл .pem с помощью TextWrangler

2. В нижней части приложения проверьте, установлен ли тип прерывания «Windows (CRLF)».


1

Его ec2-пользователь для Amazon Linux AMI и Ubuntu для образов Ubuntu. Кроме того, RHEL 6.4 и более поздняя версия ec2-пользователя RHEL 6.3 и более ранняя версия root


0

Просто добавляю в этот список. Сегодня утром у меня были проблемы с новым пользователем, только что добавленным в экземпляр AWS EC2. Чтобы вырезать в погоню, проблема была SELinux (который был в обеспечении режиме), а также в том, что мой домашний каталог пользователя был на новом томе, подключенном к EBS. Почему-то я полагаю, что selinux не нравится этот другой том. Мне потребовалось некоторое время, чтобы понять, как я просматривал все другие обычные проблемы с ssh (/ etc / ssh / sshd_config был в порядке, конечно, пароль не разрешен, права были правильными и т. Д.)

Исправление?

Пока (пока я не пойму, как разрешить пользователю использовать ssh на другом томе или каким-то образом сделать этот том истинной домашней директорией):

sudo perl -pi -e 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
sudo setenforce 0

Вот и все. Теперь мой новый пользователь может войти, используя свой собственный ключ id_rsa.


0

Была такая же проблема. В доступе отказано (publickey) при попытке входа в систему с помощью 'ec2-user' или с помощью 'root'.

Погуглил номер AMI образа машины, и он указал информацию о входе в SSH прямо на вики-странице Debian.

Надеюсь это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.