Як зберігати SSH ключі?


67

Я почав використовувати ключі SSH замість паролів зовсім недавно (звичайно, дякую GitHub), тому, будь ласка, майте на увазі, що я досить нова в цілому цій концепції. Наразі мої ключі просто лежать під ~ / .ssh, але я не впевнений, чи це хороша практика. Наприклад, якщо у мене є кілька машин, мені потрібно буде дублювати свої приватні ключі, що я вважаю небажаним. Або, якщо мій жорсткий диск перейде на капут, я втрачу ті ключі, які (я думаю) також небажані.

Отже, які найкращі практики зберігання SSH-ключів надійно, зручно та надійно?

Здається, використання смарт-картки - це варіант (див. Smartcards для зберігання gpg / ssh-ключів (Linux) - що мені потрібно? ), Це найкращий варіант?

Оновлення. Причиною виникнення питання було те, що багато сервісів (наприклад, GitHub, AWS EC2) надають посібники про те, як налаштувати SSH-ключі для користування сервісом, але мало на чому немає (наприклад, що робити, якщо у вас вже створений ключ по ssh-keygen[1], які рекомендовані заходи безпеки). І незрозуміло, чи є ця інформація насправді неважливою, чи очікується, що ви знаєте її "за замовчуванням".

Підсумовувати відповіді до цього моменту (але, будь ласка, прочитайте їх, і якщо у вас є що додати - будь ласка): здається, що в цьому випадку добре, якщо ви просто залишите свої приватні ключі в ~ / .ssh, якщо ви бережіть їх від інших людей; але переконайтесь, що у вас є інший спосіб отримати доступ до служби для завантаження або генерування нового ключа, якщо ви втратите його (як правило).

[1] GitHub використовувався для надання допомоги щодо управління кількома ключами .


Це посилання, здається, порушено help.github.com/multiple-ssh-keys
— KJ Ціна

@KJ Price, завдяки Wayback Machine Internet Archive , сторінка все ще доступна в Інтернеті, хоча не за її вихідним посиланням. Копію сторінки, заархівованої 2 вересня 2011 року, можна знайти за допомогою декількох ключів SSH .
— місячна точка

Відповіді:


41

Наприклад, якщо у мене є кілька машин, мені потрібно буде дублювати приватні ключі, що я вважаю небажаним.

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

Крім того, якщо мій жорсткий диск перейде до капуту, я втрачу приватний ключ, який (я думаю) також небажаний.

Не зовсім; якщо ви втратите свій приватний ключ, просто створіть новий і завантажте відповідний відкритий ключ.

Що ви того варті, ви маєте рацію, що копіювання приватного ключа вкрай небажане. В ідеалі приватний ключ повинен генеруватися в одному файлі ( ~/.ssh/id_rsaнаприклад) і ніколи не повинен залишати цей файл - тобто він ніколи не повинен бути скопійований, переміщений та особливо не переданий через мережу. (наприклад, я виключаю їх із резервного копіювання) Через характер асиметричних протоколів аутентифікації вам потрібно потурбуватися лише про те, щоб не захищати приватний ключ від рук інших. Якщо ви переходите трохи за борт і самі втрачаєте це, це, як правило, не велика справа. (Це не слід плутати з приватними ключами асиметричного шифрування , наприклад, ключами GPG, до яких ви, мабуть, хочете утримувати.)


14
Це працює лише в тому випадку, якщо у вас є якийсь інший метод доступу до серверів, до яких цей приватний ключ забезпечує доступ. Ви можете завантажити новий відкритий ключ, лише якщо у вас є такий резервний доступ.
— ТРЕЙ

2
@TREE: правильно, але, на мій досвід, надзвичайно рідко можна знайти сервер, який не надає альтернативного способу доступу (або принаймні додавання додаткового відкритого ключа, не проходячи через SSH).
— David Z

3
Дякую, що багато чого очищає. Дійсно, втрата приватного ключа SSH не виглядає проблемою, оскільки для всіх служб, якими я користуюся, завжди здається, що це ще один спосіб отримати доступ до служби для завантаження нового.
— Антон Строгонов

3
AWS не надає жодної іншої форми доступу, крім приватного ключа. Вам потрібно відключити накопичувач і обдурити його, щоб отримати доступ після втрати приватного ключа.
— Асад Саєдюддін

1
Зауважте, що ви можете ввести пароль у свій приватний ключ, якщо вам потрібен інший рівень захисту.
— судо

8

Я додам, що ~ / .ssh / читається вашим браузером, якщо ви використовуєте один і той же обліковий запис користувача для запуску обох.

Спробуй це! Наведіть веб-переглядач на ваш приватний ключ у вашому домашньому каталозі. Це весело.

Тому я рекомендую зберігати ssh-ключі в домашній каталог іншого облікового запису користувача.

слово на захисних ключах парольної фрази

  • У наші дні зламати не випадкові випадкові паролі дуже швидко. Ознайомтеся з хеш-котом
    • (Хоча випадкові та довгі 12+ паролі для помилок все ще потребують досить тривалого часу)
    • Таким чином, зашифровані ssh-ключі в AES є нездатними для огляду в майбутньому, якщо ви використовуєте хороші довгі парольні фрази. Див. Рекомендації github
  • Тож деякі веб-сайти можуть здогадатися-схопити ваш ключ без JavaScript. А потім жорстоко натисніть клавішу в автономному режимі.
  • І веб-переглядачі можуть також заглядати у ваш буфер обміну з Ж / С. Таким чином, вставлення копій дуже довгих парольових фраз також наражає вас на небезпеку більш складних атак JavaScript.

look_at_keys.html

 9 <HTML>
10 <HEAD>
11 <TITLE>look at keys</TITLE>
12 </HEAD>
13 <FRAMESET cols="20%, 80%">
14   <FRAMESET rows="100, 200">
15       <FRAME src="/Users/yourname/.ssh/stuff.pem">
16       <FRAME src="blah.html">
17   </FRAMESET>
18   <FRAME src="contents_of_frame3.html">
19 </FRAMESET>
20 </HTML>

17
Щоб було зрозуміло, лише тому, що браузер може прочитати ваш приватний ключ, що не означає, що веб-сайт, який працює в браузері, може.
— Ajedi32

6
Але, якщо ви вводите процес у процес браузера. Тоді ви також можете взяти під контроль браузер. Тож цей аргумент цілком справедливий.
— BigSack

Але тоді вам доведеться зламати процес, який вводить процеси в реєстр процесорних одиниць вашого браузера.
— Skid Kadda

8

Є дуже приємний інструмент на ім'я KeePass2 ( http://keepass.info/ ) з розширенням ( http://lechnology.com/software/keeagent/ )

Ви можете зберігати там паролі, ключі SSH та багато іншого (на офіційній сторінці KeePass набагато більше корисних розширень)
Якщо ви хочете автоматично входити в систему за допомогою ключів SSH, вам просто потрібно встановити PuTTY, Pageant та KeePass з KeeAgent. Якщо ви правильно налаштували, вам не потрібно встановлювати клавіші в PuTTY, Pageant або FileZilla.

Я сам це використовую, і я дуже радий цьому. У мене більше 30 VPS і Root Server з певною кількістю різних SSH ключів, і єдине, що мені потрібно зробити, відкрити KeePass (Це не мій основний безпечний пароль), і тоді мені просто потрібно ввести в консоль свою парольну фразу.


3

Я рекомендую зберігати приватні ключі:

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

Я б сказав, найкраще місце було б:

  • зовнішній жорсткий диск
  • клавіша спалаху
  • комп’ютер, не підключений до Інтернету

Ще краще, просто роздрукуйте його і покладіть в сейф, захищений від пожежі.


4
Безпека / кращі практики працюють рука об руку з практичністю. Якщо стратегія безпеки перешкоджає використанню системи, її потрібно обійти користувачем, а не зловмисником.
— zaTricky

1

У мене є файл tar, у якому встановлено моє налаштування dir користувача (.bashrc, .ssh / та інші конфігураційні файли), яке я зберігаю в безпечному місці. Коли я десь отримую новий обліковий запис оболонки, я розпаковую файл tar.

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

Особисто мені зручно просто копіювати .ssh / речі скрізь (це також означає, що звичайний ключ ssh отримує ssh доступ миттєво, оскільки він вже є у файлі санкціонованих_кіїв).


Я думаю, що зашифрований ~ / .ssh висів навколо USB-накопичувача врятував би від необхідності генерувати та завантажувати новий ключ у разі відмови обладнання. Однак, оскільки існує дуже мало серверів, до яких я використовую SSH-ключі (і дуже мало машин, з яких я підключаюсь), генерування нових ключів не призведе до великих витрат.
— Антон Строгонов

2
Це коні на курси і залежить від того, для чого ви використовуєте ключі. Я не бачу проблеми з копіюванням приватного ключа ssh через уже зашифроване посилання SSH. Але якщо ви не довіряєте цільовій машині і не знаєте, хто має кореневий доступ, вам не слід ставити нічого на сервер, який ви не можете дозволити собі втратити.
— EightBitTony

Ви не хочете ставити свій приватний ключ на чужий сервер. Кожен, хто має кореневий доступ на цьому сервері, може прочитати ваш приватний ключ, і тоді він може видати себе за себе в системах, до яких ви отримуєте доступ із цим приватним ключем. Вам слід лише ввести відкритий ключ для доступу до сервера. І не думайте, що парольна фраза дуже допомагає, якщо ви використовуєте її на віддаленій машині для дешифрування приватного ключа.
— Codeguy007

Ви можете переслати ssh-агент через ssh. Таким чином, вам не потрібно зберігати приватний ключ на сервері або надсилати свою парольну фразу через мережу. stackoverflow.com/questions/12257968 / ...
— Codeguy007

1

Ви можете зберігати ключі ssh в окремому каталозі всередині зашифрованого розділу. Тоді ви можете використовувати ssh, що вказує на цей каталог за допомогою -i:

ssh -i identity_file me@example.com

Повний опис ( man ssh):

-i ідентифікаційний_файл

Вибирає файл, з якого зчитується особа (приватний ключ) для аутентифікації відкритого ключа. За замовчуванням для версії протоколу 1 є ~ / .ssh / ідентифікатор та ~ / .ssh / id_dsa, ~ / .ssh / id_ecdsa, ~ / .ssh / id_ed25519 та ~ / .ssh / id_rsa для версії протоколу 2. Файли посвідчень можуть бути також буде вказано на основі хоста у файлі конфігурації.
Можливо мати кілька опцій -i (та кілька ідентичностей, вказаних у файлах конфігурації). Якщо в директиві CertificateFile чітко не вказано жодних сертифікатів, ssh також спробує завантажити інформацію сертифіката з імені файлу, отриманого додаванням -cert.pub до імен файлів ідентичності.

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

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

-F configfile 

встановлює шлях до конфігураційного файлу.

PS Я б створив псевдонім alias ssh='ssh -i ... -F ...'і помістив його у ваш профіль.

PPS Я цього ще не перевіряв, і не знаю, як інші програми (наприклад, git) будуть працювати з цими налаштуваннями ssh.

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