Попытка SSH в экземпляр Amazon Ec2 - ошибка разрешения


745

Это, наверное, глупо простой вопрос для некоторых :)

Я создал новый экземпляр Linux на Amazon EC2 и как часть этого скачал файл .pem, чтобы я мог войти в SSH.

Когда я пытался ssh с:

ssh -i myfile.pem <public dns>

Я получил:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'amazonec2.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: amazonec2.pem
Permission denied (publickey).

После этого поста я попытался chmod +600 файл pem, но теперь, когда я ssh, я просто получаю:

Permission denied (publickey).

Какую ошибку школьника я здесь делаю? Файл .pem находится в моей домашней папке (в osx). Это разрешения выглядят так:

-rw-------@   1 mattroberts  staff    1696 19 Nov 11:20 amazonec2.pem

2
Эта ошибка также возникает, когда вы используете неправильный файл pem.
Рахул Прасад

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

Я в Windows с WinSCP. Там нет ничего , чтобы сделать с chmod 400 myfile.pemкак он использует myfile.ppkпорожден PuTTYgen из файла PEM.
Четабахана

Эта ошибка также может произойти, если вы не входите в систему с нужным пользователем;)
andrea06590

Ответы:


1464

Проблема в том, что у файла неправильный мод.

Легко решается выполнением -

chmod 400 mykey.pem

Взято из инструкции Amazon -

Ваш ключевой файл не должен быть общедоступным для работы SSH. При необходимости используйте эту команду: chmod 400 mykey.pem

400 защищает его, делая его только для чтения и только для владельца.


3
Спасибо! Что делает chmod 400? в mykey.pem?
Коста

19
400 защищает его, делая его только для чтения и только для владельца.
Коф

1
После этого я получаю «Предупреждение: файл идентификации blabla.pem недоступен: такого файла или каталога нет», когда я выполняю команду ssh -l USERNAME_HERE -i .ssh / yourkey.pem public-ec2-host.
coolcool1994

3
Эта команда + ssh -i YOUR_PEM_FILE.pem ec2-user@YOUR_IPисправила проблему. Может быть, это должен быть принятый ответ ...
c4k

1
Как я могу запустить то же самое для Windows?
Ахсан Мухтар

262

Вы, вероятно, используете неправильное имя пользователя для входа в систему:

  • большинство изображений Ubuntu имеют пользователя ubuntu
  • AMI Амазонки ec2-user
  • большинство изображений Debian имеют либо rootилиadmin

Чтобы войти, вам нужно настроить команду ssh:

ssh -l USERNAME_HERE -i .ssh/yourkey.pem public-ec2-host

НТН


30
или ssh -i key.pem ubuntu @ servername
jsh

43
Сообщение об ошибке говорит само за себя: файл сертификата .pem недостаточно защищен. Сделайте chmod 400 xyz.pem как предложено ниже.
allprog

1
@allprog для меня это просто говорит об этом Permission denied (publickey).и ничего больше ...
Арам Кочарян

1
Я обнаружил проблему - я не использовал тот же ключ, с которым создал экземпляр
Арам Кочарян

12
Это не решение - права доступа к загруженному файлу ключа по умолчанию составляют 844. должно быть 400 chmod 500 <path_to_pem_file>должно сделать это.
Элад Мейдар

62

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

шаг 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

шаг 2, просто ssh в :)

ssh user_name@<instance public dns/ip>

например

ssh ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com

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


"ssh-add" - это то же самое, что просто копировать файл * .pem в папку ~ / .ssh?
ア レ ッ ク ス

1
>> просто копирование файла * .pem в папку ~ / .ssh - это не одно и то же, вы должны добавить в папку и затем запустить команду ssh-add.
super_p

Очень поздно к игре, но чтобы добавить некоторые пояснения ... 1. добавьте файл .pem в каталог ~ / .ssh (создайте его при необходимости), 2. используйте команду ssh-add, чтобы добавить идентификацию в аутентификацию агент; это означает, что никогда не нужно указывать файл .pem при использовании ssh
Ян Аткин,

2
После ssh-add ¬ / .ssh / key.pem; Получение ошибки Не удалось открыть соединение с вашим агентом аутентификации. электронные ssh-agent -sотчеты SSH_AGENT_PID = 3409; ssh-add выдает ту же ошибку, что и выше ......... Любая помощь здесь, плз
Tariq

Ого, это было бы очень удобно для всех моих будущих подключений к моему VPS. Спасибо, приятель :)
Ахмад Муштак

36

Хорошо, чувак, единственное, что сработало для меня, было:

  1. Изменить разрешения ключа

    chmod 400 mykey.pem

  2. Обязательно войдите в систему, используя ec2-user , и правильный адрес ec2-99 .... Адрес ec2-99 находится в нижней части консоли aws, когда вы вошли в систему и видите свой экземпляр в списке

    ssh -i mykey.pem ec2-user@ec2-99-99-99-99.compute-1.amazonaws.com


Я не могу найти адрес ec2-99. Не могли бы вы мне помочь?
Адиль Малик

1
chmod 400 mykey.pem войдите в Ubuntu следующим образом: ssh -i mykey.pem ubuntu@SERVER.amazonaws.com
Гал Браха,

27

Посмотрите на эту статью . Вы используете не общедоступный DNS, а форму

ssh -i your.pem root@ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com

где имя видно на вашей панели AMI


Приветствия за статью, очень полезно!
Мэтт Робертс

незначительное улучшение: при попытке войти в систему как root aws выдает следующее сообщение: «Пожалуйста, войдите как пользователь ec2, а не как пользователь root».
Андре Швайгхофер

как мне узнать, что такое мой ec2-XXX-XXX-XXX-XXX.z-2.compute-1.amazonaws.com?
ア レ ッ ク ス

Консоль управления> EC2> Экземпляры и выберите свой экземпляр.
Реник

Корень @ - это то, чего не хватает всем в этом ответе. Ваш помог! Это и chmod.
lordB8r


13

В окнах вы можете перейти к свойствам файла pem, и перейти на вкладку «Безопасность», затем нажать кнопку «Далее».

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


7

Я знаю, что на этот вопрос уже отвечали, но для тех, кто попробовал их все, и вы все еще получаете надоедливый "Отказано в доступе (publickey)". Попробуйте запустить свою команду с SUDO. Конечно, это временное решение, и вы должны правильно установить разрешения, но, по крайней мере, это позволит вам определить, что ваш текущий пользователь не работает с необходимыми привилегиями (как вы и предполагали)

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com

Как только вы сделаете это, вы получите сообщение, подобное этому:

Please login as the user "ec2-user" rather than the user "root"

Который также редко документирован. В этом случае просто сделайте это:

sudo ssh -i amazonec2.pem ec2-xxx-xxx-xxx-xxx.us-west-2.compute.amazonaws.com -l ec2-user

И вы получите великолепное

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

2
Спасибо .. Я все еще получаю ошибку после попытки всех вариантов, упомянутых выше. Запуск SSH с Sudo работал для меня.
Гуршаран Сингх

Я хотел бы знать, почему я должен запустить это в sudo. Я пробовал chmod 400 xyz.pem, но это не помогло.
Самуэль Домингес

6

В терминале Mac выполнение команды «chmod 400 xyz.pem» мне не помогло, оно продолжало говорить, что разрешение отклонено. Для пользователей Ubuntu я бы предложил

  1. ssh-add xyz.pem
  2. ssh -i xyz.pem ubuntu@ec2-54-69-172-118.us-west-2.compute.amazonaws.com (обратите внимание, что пользователь Ubuntu)

4

Рекомендации по SSH-ключам и разрешению файлов:

  • Каталог .ssh - 0700 (только по владельцу)
  • закрытый ключ / файл .pem - 0400 (только для чтения владельцем)
  • открытый ключ / файл .pub - 0600 (чтение и запись только владельцем)

    chmod XXXX file/directory


3

ssh -i /.pem user @ host-machine-IP

Я думаю, это потому, что либо вы ввели неверные учетные данные, либо вы используете открытый ключ, чем закрытый ключ, либо ваши права доступа к порту открыты для ВСЕХ для ssh. Это плохо для Амазонки.


3

Альтернативный вход в систему с помощью PuTTY. Это хорошо, но нужно несколько шагов.

  1. Получите ваш .pem, который был сгенерирован, когда вы впервые создали экземпляр EC2.
  2. Преобразуйте файл .pem .ppk, используя PuttyGen, поскольку PuTTY не читает .pem.
  3. Откройте PuTTY и введите свое имя хоста, которое является вашим именем пользователя + общедоступный DNS (например, ubuntu@ec2-xxx-xxx-xxx-xxx.region.compute.amazonaws.com). Не ваше имя пользователя учетной записи AWS.
  4. Затем перейдите к Соединению> SSH> Auth . Затем добавьте ваш .ppk файл. Нажмите « Обзор», где написано «Файл закрытого ключа для аутентификации» .
  5. Нажмите Открыть, и вы сможете сразу установить соединение.

Я использую PuTTY 0.66 в Windows.


Это работает, но есть ли способ заставить соединение ssh работать из командной строки напрямую?
Ариэль

3

В дополнение к другим ответам, вот что я сделал, чтобы это работало:

  • Скопируйте ключ в папку .ssh, если у вас еще не было:

cp key.pem ~/.ssh/key.pem

  • Дайте соответствующие разрешения ключу

chmod 400 ~/.ssh/key.pem

eval `ssh-agent -s` ssh-add

  • Затем добавьте ключ

ssh-add ~/.ssh/key.pem

Теперь вы должны быть в состоянии SSH EC2 (:


2

Выполните chmod 400 yourkeyfile.pem Если вы используете Amazon Linux, используйте ssh -i yourkeyfile.pem ec2-user @ ip для ubuntu ssh -i yourkeyfile.pem ubuntu @ ip для centos ssh -i yourkeyfile.pem centos @ ip


2

Причин этой ошибки может быть три.

  1. Вы используете неправильный ключ.
  2. Ваш ключ не имеет правильных разрешений. Вам нужно chmod до 400.
  3. Вы используете не того пользователя. Образы Ubuntu имеют пользовательский Ubuntu , AMI Amazon - это ec2-пользователь, а образы Debian имеют root или admin

2

Для меня проблема заключалась в том, что мой файл .pem находился в одном из моих разделов NTFS. Я переместил его в раздел Linux (ext4).

Дали необходимые разрешения, запустив:

chmod 400 my_file.pem

И это сработало.


2

Что ж, глядя на описание вашего поста, я чувствую, что вы сделали 2 ошибки: -

  1. Установите правильные разрешения для закрытого ключа . Команда ниже должна помочь вам установить правильное разрешение файла.

    chmod 0600 mykey.pem

  2. Неправильный пользователь ec2 вы пытаетесь войти .

    Глядя на ваш журнал отладки, я думаю, что вы создали экземпляр Amazon Linux. Пользователь по умолчанию для этого типа экземпляра ec2-user. Если бы этот экземпляр был Ubuntu, то ваш пользователь по умолчанию был бы ubuntu.

    ssh -i privatekey.pem default_ssh_user@server_ip

Note:
   For an Amazon Linux AMI, the default user name is ec2-user.

   For a Centos AMI, the default user name is centos.

   For a Debian AMI, the default user name is admin or root.

   For a Fedora AMI, the default user name is ec2-user or fedora.

   For a RHEL AMI, the default user name is ec2-user or root.

   For a SUSE AMI, the default user name is ec2-user or root.

   For an Ubuntu AMI, the default user name is ubuntu.

   Otherwise, if ec2-user and root don't work, check with the AMI provider.

источник: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html


1

Контрольный список:

  1. Вы используете правильный закрытый ключ .pem файл?

  2. Правильно ли установлены его разрешения? (Мои AMI бренда Amazon работают с 644, но Red Hat должен быть не менее 600 или 400. Не знаю об Ubuntu.)

  3. Вы используете правильное имя пользователя в строке SSH? Amazon-brandded = "ec2-user", Red Hat = "root", Ubuntu = "ubuntu". Пользователь может быть указан как «ssh -i pem usename @ hostname» ИЛИ «ssh -l username -i pem hostname»


1

Просто измените разрешение файла pem на 0600, разрешенное только для разрешенного пользователя, и оно будет работать как шарм.

sudo chmod 0600 myfile.pem

А затем попробуйте ssh, он будет работать отлично.

ssh -i myfile.pem <<ssh_user>>@<<server>>

1

По умолчанию разрешения не позволяют ключ pem. Вам просто нужно изменить разрешение:

chmod 400 xyz.pem

и если экземпляр Ubuntu, то подключиться с помощью:

ssh -i xyz.pem ubuntu@ec2-youraws.amazonaws.com


1

Файл ключа не должен быть общедоступным, поэтому используйте разрешение 400

chmod 400 keyfile.pem

Если выше команда показывает ошибку разрешения, используйте

sudo chmod 400 keyfile.pem

Теперь зайдите в машину ec2, если вы все еще сталкиваетесь с проблемой, используйте ec2-user

ssh -i keyfile.pem ec2-user@ec2-12-34-56-78.compute-1.amazonaws.com


1

.400 защищает его, делая его только для чтения и только для владельца.
Вы можете найти ответ из руководства ASW.

chmod 400 yourPrivateKey.pem

введите описание изображения здесь


0

Ниже приведены простые шаги для пользователя Linux для подключения к серверу с помощью файла .pem:

Step1: To к местоположению файла pem и скопируйте его в домашнее местоположение .ssh.

cp example.pem ~/.ssh/example.pem

Шаг 2: Изменить разрешение

chmod 400 ~/.ssh/example.pem

Шаг 3: Запустите следующую команду

ssh -i ~/.ssh/example.pem ec2-user@host.com

Поскольку эта команда слишком длинная, вы можете создать псевдоним этого, используя следующие команды:

 vim ~/.bashrc

Напишите в конце ту же команду следующим образом.

alias sshConnect='ssh -i ~/.ssh/example.pem ec2-user@host.com'

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


0

Это просто проблема с разрешением вашего ключа aws pem.

Просто измените разрешение ключа pem на 400, используя приведенную ниже команду.

chmod 400 pemkeyname.pem

Если у вас нет разрешения на изменение разрешения файла, вы можете использовать команду sudo, как показано ниже.

sudo chmod 400 pemkeyname.pem

Я надеюсь, что это должно работать нормально.


0

Я видел две причины этой проблемы

1) ключ доступа не имеет прав доступа. Ключи pem с разрешением по умолчанию не позволяют устанавливать безопасное соединение. Вам просто нужно изменить разрешение:

chmod 400 xyz.pem

2) Также проверьте, вошли ли вы с правильными учетными данными пользователя. В противном случае используйте sudo при подключении

sudo ssh -i {keyfile} ec2-user @ {IP-адрес удаленного хоста}


0

Ваш ключ не должен быть публично доступен для работы SSH. Используйте эту команду, если необходимо:

chmod 400 Interview-apps.pem

Connect to your instance using its Public DNS:

ec2-**-***-***-***.us-west-2.compute.amazonaws.com

Пример:

ssh -i "Interview-apps.pem" ec2-user@ec2-**-***-***-***.us-west-2.compute.amazonaws.com

0

Пожалуйста, игнорируйте этот ответ, если он не важен для вас, но из моего опыта я видел, что у людей возникли проблемы, Permission denied (publickey)потому что они просто вставляли свой открытый ключ (на целевой машине) без первой буквы !

Это происходит при использовании vim для редактирования (вставки) ключа. Поскольку vim по умолчанию открывается в командном режиме (не в режиме вставки ), вставка ключа без переключения в режим вставки (т.е. i) приведет к пропуску первой sбуквы, например, вместо

ssh-rsa <key>

Вы заканчиваете тем, что вставили

sh-rsa <key>

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

cat ~/.ssh/id_rsa.pub

Только если вы уверены, выполните следующие шаги; Попытка ssh в подробном режиме (т. е. флаг -v) может указать на реальную проблему:

ssh -v -i <private_key> <name>@<ip> -p <port>

В качестве дополнительного примечания, как уже упоминалось здесь другими, в большинстве случаев запуск пустого агента ssh (программы, хранящей ваши ключи в памяти) и добавление вашего ключа должен решить проблему:

ssh-agent bash
ssh-add <private_key>

-1

Для меня это помогло переместить файл .pem в каталог приложений. Так сказать, fooapp - это название моего приложения. Я поместил это прямо там.


-2

Иногда в папке может быть ошибка. Я не знаю, почему...

Вы можете изменить папку и попробовать еще раз. Например, вы можете экспериментировать в обычных папках («Рабочий стол», «Загрузки» и т. Д.).

Я попробовал этот метод и работал


-2

Эта ошибка только из-за разрешения.

Просто дайте разрешение 400

#chmod 400 pemfilepath


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