Ключ SSH: "Дозволи 0644 для" id_rsa.pub "занадто відкриті." на mac


261

Я генерую парочку ключів ssh на своєму mac і додаю відкритий ключ до мого сервера ubuntu (насправді це віртуальна машина на моєму mac), але коли я намагаюся увійти на сервер ubuntu, він говорить:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/tudouya/.ssh/vm/vm_id_rsa.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/tudouya/.ssh/vm/vm_id_rsa.pub
Permission denied (publickey,password).

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

vm dir:
drwxr-xr-x   4 tudouya  staff    136  4 29 10:37 vm

key file:
-rw-------  1 tudouya  staff  1679  4 29 10:30 vm_id_rsa
-rw-r--r--  1 tudouya  staff   391  4 29 10:30 vm_id_rsa.pub

будь ласка, дайте мені якусь ідею ... ===========================================

I написати інформацію про хост в ssh_config:

Host ubuntuvm
    Hostname 10.211.55.17
    PreferredAuthentications publickey
    IdentityFile /Users/tudouya/.ssh/vm/vm_id_rsa.pub

Запускаю команду "ssh -v ubuntuvm", вона відображає:

ssh -v ubuntuvm
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: /etc/ssh_config line 103: Applying options for *
debug1: /etc/ssh_config line 175: Applying options for ubuntuvm
debug1: Connecting to 10.211.55.17 [10.211.55.17] port 22.
debug1: Connection established.
debug1: identity file /Users/tudouya/.ssh/vm/vm_id_rsa.pub type 1
debug1: identity file /Users/tudouya/.ssh/vm/vm_id_rsa.pub-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_6.6.1p1 Ubuntu-8
debug1: match: OpenSSH_6.6.1p1 Ubuntu-8 pat OpenSSH*
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5-etm@openssh.com none
debug1: kex: client->server aes128-ctr hmac-md5-etm@openssh.com 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 55:6d:4f:0f:23:51:ac:8e:70:01:ec:0e:62:9e:1c:10
debug1: Host '10.211.55.17' is known and matches the RSA host key.
debug1: Found key in /Users/tudouya/.ssh/known_hosts:54
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,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/tudouya/.ssh/vm/vm_id_rsa.pub
debug1: Server accepts key: pkalg ssh-rsa blen 279
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/tudouya/.ssh/vm/vm_id_rsa.pub' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/tudouya/.ssh/vm/vm_id_rsa.pub
debug1: No more authentication methods to try.
Permission denied (publickey,password).

1
Чи можете ви відредагувати своє запитання, щоб включити конкретну команду ssh, яку ви виконуєте? Якщо ключовий файл, про який йдеться, вказаний у файлі налаштування ssh, будь ласка, включіть також відповідні рядки з конфігураційного файлу.
Кенстер

Для мене були "погані дозволи"
впишіть

Я стикаюся з цією проблемою, коли додаю -i id_rsa.pubдля використання команди ssh для з'єднання. Здається, що змусити використовувати якийсь відкритий ключ у командній силі ssh, щоб запитати пароль (навіть коли пароль був порожнім, принаймні в моєму випадку)
Дієго Андрес Діас Еспіноза

Відповіді:


148
debug1: identity file /Users/tudouya/.ssh/vm/vm_id_rsa.pub type 1

Здається, ви намагаєтеся використовувати неправильний файл ключа. Файл із розширенням ".pub" - це файл відкритого ключа. Відповідний файл без розширення ".pub" - це файл приватного ключа. Коли ви запускаєте ssh-клієнт для підключення до віддаленого сервера, вам слід надати файл приватного ключа клієнту ssh.

Напевно, у вашому .ssh/configфайлі (або /etc/ssh_config) є рядок, який виглядає приблизно так:

IdentityFile .../.ssh/vm/vm_id_rsa.pub

Вам потрібно видалити розширення ".pub" з назви файлу:

IdentityFile .../.ssh/vm/vm_id_rsa

У мене виникли проблеми із SQLPro і неправильно вибрав .pubфайл public ( ) замість приватного.
Генрі

1
Я ssh -i id_ed25519.pubssh -i id_ed25519
Борис

2
Спасибі врятували мене тут.
Абнер

Блискуче! Дякую!
Alliswell

574

Я пропоную вам зробити:

chmod 400 ~ / .ssh / id_rsa

Для мене робота чудова.


33
“Permissions 0644 for 'id_rsa.pub' are too open."і ключ відтак був ігнорований. Це, мабуть, тому, що я скопіював файл ключа з мого іншого ПК. Але виправлення дозволів вирішило проблему. Дякую!
парасити

2
@ xoxn - 1'w3k4n Чому це так погано? Має сенс, якщо люди скопіювали або іншим чином погано керували своїм доступом до читання-запису до цих чутливих файлів, то їх слід виправити.
Джерард

5
Це не клейка стрічка. Якщо ви скопіювали свій ідентифікатор, це має сенс.
ALisboa

Для мене працювали як рішення при копіюванні ssh-ключів зі старого комп’ютера!
Нік

1
Працює і на WSL
h-rai

59

Ключ повинен бути читабельний користувачем, який увійшов у систему.

Спробуйте це:

chmod 400 ~/.ssh/Key file
chmod 400 ~/.ssh/vm_id_rsa.pub

З допомогою відкритого ключа 400 або 600 я отримую невірний формат робитьssh-add ~/.ssh/id_rsa.pub
rhand


23

Після запуску нижче команди працює для мене

sudo chmod 600 /path/to/my/key.pem

20

У моєму випадку це був файл .pem. Виявляється, це також добре для цього. Змінено дозволи файлу і він працював.

chmod 400 ~/.ssh/dev-shared.pem

Дякуємо всім, хто допомагав вище.


13

Якщо ключі знаходяться в каталозі ~ / .ssh, використовуйте

chmod 400 ~ / .ssh / id_rsa

Якщо ключі знаходяться в різних каталогах, використовуйте

chmod 400 directory_path / id_rsa

Це працювало для мене.


2
Як це покращує інші відповіді?
Ніко Хааз

2
Це не ключ, який потрібно захищати, це приватний
Пікар

Приватний ключ повинен бути захищений.
Башан

Це працює для мене. Я думаю, що chmod 400 ~/.ssh/id_rsaце ви мали на увазі @Anirban. Як зазначено вище: Файл із розширенням ".pub" - це файл відкритого ключа. Відповідний файл без розширення ".pub" - це файл приватного ключа. Нам потрібно захистити приватне.
naveenKumar

Відредагував відповідь. Це має бути приватний ключ.
Анірбан

12

Багато відповідей, але пояснень немає ...

Помилка видана через те, що права доступу до приватного ключа занадто відкриті. Це ризик для безпеки.

Змініть дозволи на файл приватного ключа, щоб вони були мінімальними (читати лише власником)

  1. Зміна власника chown <unix-name> <private-key-file>
  2. Встановити мінімальні дозволи (читати лише власнику файлу) chmod 400 <private-key-file>

7

Як на мене, режим за замовчуванням id_rsaє 600, що означає readableі writable.

Після того, як я натискаю цей файл на git repo і витягую його з іншого ПК, іноді переходить у режим файлу приватного ключа -rw-r--r--.

Коли я витягую репортаж із ssh після вказування файлу приватного ключа, він не вдався і запропонував попередження те саме з вами. Далі йде мій сценарій.

ssh-agent bash -c "ssh-add $PATH_OF_RSA/id_rsa; \
git pull git@gitee.com:someone/somerepo.git "

Я вирішую цю проблему, просто змінивши режим на 600.

chmod 600 $PATH_TO_RSA/id_rsa

6

Надання дозволу 400 робить ключ приватним і не доступним ким-небудь невідомим. Він робить ключ захищеним.

chmod 400 /Users/tudouya/.ssh/vm/vm_id_rsa.pub

2

chmod 400 /etc/ssh/* працює для мене.


3
Це можна робити до тих пір, поки ви зрозумієте, що впливаєте на всі клавіші в каталозі.
J2N

2

Якщо ви використовуєте .ssh / config файл, спробуйте

chmod 0400 .ssh/config

тоді:

chmod 0400 .ssh/<<KEYFILE_PATH>>

2

Ті, хто запропонував chmod 400 id_rsa.pub, зовсім не звучали правильно. Цілком можливо, що op використовував ключ pub замість приватного ключа для ssh.

Тож це може бути так просто, як ssh -i /Users/tudouya/.ssh/vm/vm_id_rsa (the private key) user@hostце виправити.

--- оновлення ---

Перегляньте цю статтю https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2 про те, як налаштувати ключ ssh


Можливо, хоча в моєму випадку, коли я шукав це питання і дійшов до відповіді, chmod 400 було те, що мені потрібно, щоб вирішити свою проблему. Дякую всім, хто допоміг!
J2N

2

Ключі SSH мають бути приватними, тому 644дозвіл занадто відкритий.

rw -> User 
r -> Group
r -> Others

Змінивши дозвіл файлу на 600використання

chmod 600 <filename>

вирішує питання. Оскільки це робить ключ доступним лише для користувача.

Посилання: https://www.linux.com/training-tutorials/understanding-linux-file-permissions/



-8

Я видалив .pub file, і воно спрацювало.


1
Видалення файлу .pub не потрібно. Це також означає, що у вас немає запису відкритого ключа на вашій машині для подальшого використання.
Генрі

1
Якщо у вас є OpenSSH, ви можете відновити відсутній файл відкритого ключа з приватного ключа, використовуючи ssh-keygen -i -f /path/to/private.key > /desired/path/to/public.key. Отже, це насправді не втрачено. :)
dannysauer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.