Спроба 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 знаходиться в моїй домашній папці (в ОСХ). Це дозволи виглядають так:

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

2
Ця помилка також виникає, коли ви використовуєте неправильний файл pem.
Рахул Прасад

Також переконайтеся, що ви створили свій екземпляр ПІСЛЯ створеного вами і вибрали пару ключів як призначений ключ для використання. Я робив це навпаки.
Гері

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

Ця помилка також може статися, коли ви не входите в систему з належним користувачем;)
andrea06590

Відповіді:


1460

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

Легко вирішується виконанням -

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 Amazon є ec2-user
  • більшість зображень Debian мають rootабоadmin

Щоб увійти, потрібно скорегувати команду ssh:

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

HTH


30
або ssh -i key.pem ubuntu @ ім'я сервера
jsh

43
Повідомлення про помилку говорить про все: файл .pem cert недостатньо захищений. Зробіть chmod 400 xyz.pem, як запропоновано нижче.
allprog

1
@allprog для мене це просто змушує сказати Permission denied (publickey).і нічого іншого ...
Арам Кочарян

1
Я знайшов проблему - я не використовував той самий ключ, з яким я створив екземпляр
Арам Кочарян

12
Це не є рішенням - права доступу до завантаженого файлу ключів за замовчуванням становлять 844. має бути 400, chmod 500 <path_to_pem_file>слід це зробити.
Elad Meidar

62

Я знаю, що це дуже пізно в грі ... але це завжди працює для мене:

крок 1

ssh-add ~/.ssh/KEY_PAIR_NAME.pem

крок 2, просто вставте :)

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
Ian Atkin

2
Після ssh-add ¬ / .ssh / key.pem; Отримання помилки Не вдалося відкрити з'єднання з вашим агентом аутентифікації. ssh-agent -sзвіти eval SSH_AGENT_PID = 3409; ssh-add дає ту саму помилку, що і вище ......... Будь-яка допомога тут plz
Tariq

Нічого собі, це було б дуже зручно для всіх моїх майбутніх підключень до мого VPS. Спасибі товариш :)
Ахмад Муштак

36

Гаразд, єдине, що працювало на мене:

  1. Змінення дозволів ключа

    chmod 400 mykey.pem

  2. Переконайтесь, що увійдіть за допомогою користувача ec2 та правильної адреси 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> Екземпляри та виберіть свій примірник.
ренік

«Корінь @» - це те, що у всіх інших відсутні у цій відповіді. Ваша допомогла! Те, і чмод.
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 з судо працював на мене.
Гуршаран Сінгх

Мені хотілося б знати, чому я повинен запускати це в судо. Я спробував 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 for 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, на який ви намагаєтесь увійти .

    Переглядаючи ваш журнал налагодження, я думаю, що ви породили екземпляр Linux Amazon. Типовим користувачем для цього типу примірника є 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/AccessingInsancesLinux.html


1

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

  1. Користуєтесь .pem файлом правого приватного ключа?

  2. Чи правильно встановлені його дозволи? (Мої AMI-бренда Amazon працюють з 644, але червоний капелюх повинен бути не менше 600 або 400. Не знаю про Ubuntu.)

  3. Чи використовуєте правильне ім’я користувача у рядку ssh? Amazon-фірмовий = "ec2-користувач", Red Hat = "корінь", Ubuntu = "ubuntu". Користувача можна вказати як "ssh -i pem usename @ hostname" АБО "ssh -l ім'я користувача -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

Тепер ssh в машину 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

Нижче наведено прості дії для підключення користувача до сервера з використанням файлу .pem для Linux.

Крок 1: До місця розташування файлу 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 в каталог програм. Soo say fooapp - це назва мого додатка. Я помістив його прямо туди.


-2

Іноді в папці може виникнути помилка. Я не знаю чому...

Ви можете змінити папку та спробувати ще раз. Наприклад, ви можете експериментувати у звичайних папках (Настільний, Завантаження та ін.).

Я спробував цей метод і працював


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.