Чому мені під час спроби передавати 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.