Чому мені під час спроби передавати SSH з локального Ubuntu на сервер Amazon EC2?


218

У мене є екземпляр програми, запущеної в хмарі в екземплярі Amazon EC2, і мені потрібно підключити її до мого локального Ubuntu. Він чудово працює на одному з локальних ubuntu, а також на ноутбуці. Під час спроби отримати доступ до SSH до EC2 на іншій локальній Ubuntu мені надійшло повідомлення "Відмовлено у дозволі (publickey)". Мені це так дивно.

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

Хтось знає рішення?


11
"Раніше працювала" - перед чим ?
— жіноча

У мене є екземпляр Elastic Beanstalk EC2. Станом на серпень 2013 року рішенням було отримати доступ до екземпляра як користувача ec2, який усунув помилку відхилення дозволу (publicKey). Viz: ssh -i ./mike-key-pairoregon.pem ec2-user@ec2-some-address.us-west-2.compute.amazonaws.com. Звичайно , ви повинні всі інші речі , як на stackoverflow.com/questions/4742478 / ...
— mikemay

3
Цю проблему ви отримуєте, якщо вказано неправильне ім’я користувача. Aws docs ( docs.aws.amazon.com/AWSEC2/latest/UserGuide/… ) наразі дає приклад із ім'ям користувача ec2-користувача [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
FYI ви можете використовувати прапор -i, щоб вказати на шлях ключів без їх встановлення
— Хорхе Варгас

20
У моєму випадку, я використовував Bitnami .ami і не зрозумів , що вам потрібно увійти в систему, як користувач, що викликається BitNami, як: ssh -i <keyfile> bitname@<ec2-address>. На жаль, -vваріант не допоміг мені знайти це, але все-таки дуже корисно перевірити!
— Метт Конноллі

7
ну, у моєму випадку я використовував неправильне ім’я користувача. використовував "ubuntu" замість "bitnami". як це: 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або щось інше
— Йонас Ліббрехт

76

Як явно не було зазначено, sshd за замовчуванням дуже суворий щодо дозволів на authorized_keysфайли. Отже, якщо authorized_keysвін може бути призначений для запису для когось, крім користувача, або його може зробити хтось, хто не є користувачем, він відмовиться від автентифікації (якщо не налаштовано sshd StrictModes no)

Що я маю на увазі під "можна зробити доступним для запису", це те, що якщо будь-який з батьківських каталогів є доступним для запису для когось, крім користувача, користувачі, дозволені змінювати ці каталоги, можуть почати змінювати дозволи таким чином, щоб вони могли змінювати / замінювати дозволені_кейси.

Крім того, якщо /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

Зауважте, що jane не має власного .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 / Наук.)

Набагато простіше розібратися, що сталося не так з виходом налагодження, який включає помилки дозволу файлової системи. Не забудьте повернути зміни до /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варіант. Моє локальне ім’я користувача не було таким, як у віддаленій системі.

Це не відповідає на ваше запитання, але я прийшов сюди шукати відповідь на свою проблему.


25
ssh host -l userце те саме, що ssh user@host, правда?
— Znarkus

3
@Znarkus так, це те саме.
— Крегокс

Так, це вирішило і мою проблему, викликаючи помилку "Дозвіл відмовлено (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. Це потрібно запустити на сервері, до якого ви намагаєтесь підключитися, намагаючись підключитися. Він покаже помилки в простому тексті.

Це допомогло мені вирішити мою проблему:

Користувача [ім'я користувача] з xx.yy.com заборонено, оскільки жодна з груп користувачів не вказана у AllowGroups


це журнал сервера. для RHEL / CentOS 7:tail -f /var/log/secure
— Gianfranco P.

10

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

PasswordAuthentication no

Цей рядок потрібно змінити, щоб сказати так, а не ні. Після цього перезавантажте sshd-сервер.

sudo /etc/init.d/ssh restart

18
Це зробило б сервер менш захищеним.
— Знаркус

Ця проблема була у мене: я хотів створити обліковий запис для іншого користувача, автентифікувавшись лише паролем. Я також хотів мати можливість увійти як власне з місць, де не мав свого приватного ключа.
— Даніель

1
Як ми можемо піти /etc/ssh/sshd_config- якщо ми навіть не можемо потрапити на сервер?
— кіо

Щоб потрапити на сам сервер, ви повинні використовувати файл PEM, який вони видавали під час створення екземпляра. Вказівки йдуть після цього.
— Sudipta Chatterjee

Це працювало для мене, хоча перезапуск 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 Подивився на це питання саме з цієї причини.
— Джон Різельвато

Я бачу цю помилку у виконанні вашої статті. регіони = $ (ec2-описую-регіони | cut -f2) Обов’язковий варіант '-K, --private-ключ 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

Це зафіксувало це для мене, інакше нічого не можна підключити.


"при спробі отримати доступ до SSH до EC2 на іншій локальній Ubuntu."
— Grammargeek

1
Що робити, якщо я не маю санкціонованих_кілів ?
— ІгорГанапольський

2

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


1

Відповідь Грега пояснює, як усунути проблеми краще, проте актуальною проблемою є те, що у вас встановлений ключ ssh на одній стороні транзакції (клієнт), який намагається встановити автентифікацію відкритого ключа, а не автентифікацію на основі пароля. Оскільки у вас немає відповідного відкритого ключа в екземплярі EC2, це не працюватиме.


2
Як вирішити проблему?
— Жульєн Греньє

1

У мене була така ж проблема, і після спробу багатьох рішень, які не спрацювали, я відкрив порт SSH на брандмауері мого маршрутизатора (панель управління брандмауером маршрутизатора - безлад, тому важко сказати, що відбувається). Все одно, що це виправили :)

Супер криваво дратує те, що ви отримуєте помилку, це дозволено відхилено, маючи на увазі, що було зроблено якесь з'єднання, грр.


1

У мене була така ж проблема, хоча я нібито виконував усі кроки, в тому числі

$ ec2-authorize default -p 22

Однак я розпочав свою інстанцію в регіоні us-west-1. Отже, вищевказана команда також повинна вказати це.

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

Після цієї команди я зміг ssh в екземпляр. Я витратив трохи часу, перш ніж зрозумів проблему і сподіваюся, що ця публікація допомагає іншим.


0

Це рідкісний випадок, але якщо у вас увімкнено selinux і ви використовуєте nfs для каталогу з дозволеними_керами (наприклад, спільні домашні каталоги), вам потрібно буде відключити selinux (не рекомендується з міркувань безпеки, але ви можете тимчасово відключити його щоб побачити, чи це спричиняє проблему) або дозволити selinux використовувати домашні каталоги nfs. Мені не ясно в деталях, але це працювало для мене setsebool -P use_nfs_home_dirs 1


0

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

Я виявив, що це було причиною, побігши tail -f /var/log/secureна машині і побачивши помилку Authentication refused: bad ownership or modes for directory /home/<username>.

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