ssh-add не підтримується між перезавантаженнями


150

Я додав ключ до ssh до агента:

$ ssh-add ~/.ssh/id_rsa_mac
Identity added: /Users/alex/.ssh/id_rsa_mac (/Users/alex/.ssh/id_rsa_mac)

Після перезавантаження агент більше не додає цей ключ:

$ ssh-add -l
The agent has no identities.

Чому так сталося?


Я не маю часу відповісти повністю зараз, але gpg-агент у режимі ssh зробить все, що ви хочете. Спробуйте це замість застарілого ssh-агента. Якщо це допоможе, я можу спробувати розширити це, коли отримаю час пізніше.
Vality

@Vality: я сумніваюся, що gpg-агент буде постійно зберігатися через перезавантаження.
Павло Шімерда

@ PavelŠimerda Він шифрує приватні ключі з паролем користувачів, а потім розміщує їх, $HOME/.gnupg/private-keys-v1.dяк тільки ви додаєте їх з ssh-add. Це справді наполегливо. Добре припустимо, що у вас є енергонезалежний домашній каталог.
Vality

@Vality: Чи не слід це вважати проблемою безпеки? Не могли б ви так само добре використовувати ключ без парольної фрази і робити з ним, не потребуючи жодного агента?
Павло Шімерда

1
@ PavelŠimerda Це насправді не проблема безпеки, оскільки ключ зберігається в зашифрованому паролі користувачів, він все ще потребує введення пароля щоразу, коли користувач увійде в систему, щоб розшифрувати його. Зберігання ключа в незашифрованому вигляді означає, що користувач з коренем (або злодій, який забрав ваш жорсткий диск) може викрасти їх з вашої домашньої директорії, з gnupg, якщо вони викрадуть їх, вони будуть зашифровані вашим паролем і, таким чином, марні.
Vality

Відповіді:


174

Додавання ключів до агента є тимчасовим. Вони тривають лише доти, доки запускається агент. Якщо ви вб'єте його або перезавантажте комп'ютер, вони втрачаються, поки ви їх знову не додасте. На ssh-agentчоловіковій сторінці:

ssh-agent - це програма для зберігання приватних ключів, що використовуються для аутентифікації відкритих ключів (RSA, DSA, ECDSA). Ідея полягає в тому, що ssh-агент запускається на початку X-сесії або сеансу входу, а всі інші вікна або програми запускаються як клієнти програми ssh-agent. Завдяки використанню змінних середовища агент може бути знайдений і автоматично використаний для аутентифікації під час входу в інші машини за допомогою ssh (1).

Агент спочатку не має приватних ключів. Ключі додаються за допомогою ssh-add (1). При виконанні без аргументів, SSH-додати (1) додає файли ~/.ssh/id_rsa, ~/.ssh/id_dsa, ~/.ssh/id_ecdsaі ~/.ssh/identity. Якщо ідентифікатор має парольну фразу, ssh-add (1) запитує парольну фразу на терміналі, якщо вона має одну або від невеликої програми X11, якщо вона працює під X11. Якщо жодне з цих випадків не відбувається, то автентифікація не вдасться. Потім він надсилає особу агенту. В агенті може бути збережено кілька ідентичностей; агент може автоматично використовувати будь-яку з цих ідентичностей. ssh-add -lвідображає особистість, яку в даний момент зберігає агент.

macOS Сьєрра

Починаючи з macOS Sierra 10.12.2 , Apple додала опцію конфігурації UseKeychain для конфігурацій SSH. Ви можете активувати цю функцію, додавши UseKeychain yesдо свого ~/.ssh/config.

Host *
  UseKeychain yes

OSX брелок

Я не використовую OSX, але я знайшов це запитання на SuperUser під назвою: Як використовувати брелок Mac OS X з ключами SSH? .

Я розумію, що оскільки Mac OS X Leopard Keychain підтримує зберігання ключів SSH. Не могли б хто-небудь пояснити, як ця функція повинна працювати.

Тож із звуку цього звуку ви можете імпортувати свої ключі SSH в Keychain за допомогою цієї команди:

$ ssh-add -K [path/to/private SSH key]

Потім ваші ключі повинні зберігатись від завантаження до завантаження.

Щоразу, коли ви перезавантажуєте свій Mac, усі SSH-ключі у вашій брелоку автоматично завантажуватимуться. Ви повинні мати можливість бачити ключі в додатку Keychain Access, а також у командному рядку за допомогою:

  ssh-add -l

Джерело: Super User - Як користуватися брелоком Mac OS X за допомогою SSH клавіш?


справді? У Linux у мене немає цієї проблеми. Чи потрібно мені "ssh-add my_key" кожен раз, коли я перезавантажую комп'ютер?
ア レ ッ ク ス

2
@ Алекс Як пояснюється у відповіді, агент автоматично додає ~/.ssh/id_rsa. Я здогадуюсь, що це розташування вашого файлу ключів на Linux. Можливо також, що ти не використовуєш стандартний ключ ключа ssh. Є й інші, наприклад, gnome-keyring-демон, які можуть мати різну поведінку.
Патрік

але на Mac це називається "id_rsa_mac". Як змусити агент додавати його автоматично?
ア レ ッ ク ス

@Patrick: Я не впевнений, чи класика ssh-agentдодає якісь клавіші автоматично. На мою думку, це те, ssh-addщо читає стандартні місця або sshклієнт, якщо ви не використовуєте агент.
Павло Шімерда

5
Невеликий sidenote, якщо ваша команда ssh-add не розпізнає прапор -K, ви, мабуть, використовуєте версію macports ssh-add ... ви можете обійти версію macports, вказавши повний шлях до версії OSX для ssh-add ось так:/usr/bin/ssh-add -K /path/to/private/key
Кріс

20

ssh-agentЄ службою сеансу , який зберігає ключі тимчасово для користувача.

Основне призначення агента SSH - запам'ятати версію чіткого тексту ключа, захищеного за допомогою парольної фрази. Іншими словами, ключ зберігається на зашифрованому диску за допомогою парольної фрази, а власник ключа використовує ssh-addабо якийсь інструмент GUI, щоб надати парольну фразу та доручити агенту запам'ятати її до завершення сеансу або користувач не вимагає явного видалення.

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

Стандартні місця вказані на сторінці керівництва ssh(1):

За замовчуванням для протоколу версії 1 є ~ / .ssh / ідентифікатор та ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 та ~ / .ssh / id_rsa для версії протоколу 2.

Під час використання нестандартних місць ви можете використовувати -iперемикач, sshописаний на тій же сторінці керівництва, або відповідний параметр у клієнті SSH, який ви використовуєте.


4
+1 за пропаганду невикористанняssh-agent
dg99

7

У Сьєррі :

Використовуйте UseKeychain . (Я не пробував цього, але це здається найбільш правильним рішенням.)

Або

ssh-add -K /your/key
echo ssh-add -A | cat >> ~/.bash_profile

Або створити файл плісту замість додавання до ~/.bash_profile.

Відмова: як зазначали інші, я не знаю, наскільки безпечно зберігати SSH-фрази у брелок.


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