Як відкриті ключі "надсилаються" серверам і як приватні ключі "використовуються" для SSH?


11

Є дві машини Linux, скрипти А і В. працює на необхідність , щоб мати можливість SSH в B. Таким чином, генерує відкритий ключ (ймовірно ssh-keygen-порождённих id_rsa.pub), а потім використовує відповідний закритий ключ (знову ж , можливо id_rsa) , щоб зробити це з'єднання SSH.

Якщо щось, про що я говорив вище, невірно або введено в оману, почніть, виправляючи мене!

Якщо припустити, що я більш-менш мішень:

  • Як A "дає" B свій відкритий ключ ( id_rsa.pub)? Це має бути ручним процесом, чи його можна автоматизувати? Якщо вручну, який процес? Якщо автоматизована, яка команда? Коли B "отримує" цей відкритий ключ, куди він переходить або зберігається?
  • Коли ініціює з'єднання SSH з B, як A "використовує" його приватний ключ ( id_rsa) як частину цього з'єднання?

3
Чому голова не пояснює? Він показує дослідження, є SSCCE , і, наскільки мені відомо, не є дублікатом. Якщо ви не погоджуєтесь і вважаєте, що це дублікат, будь ласка, надайте посилання на питання, яке ви вважаєте, що це дублікат!
user3178622

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

3
Я також не проголосував, але я розумію, чому хтось це зробив. Це широко використовуваний метод входу, хоча я погоджуюся, що результати пошуку Google захаращені тим, як змусити його працювати, а не тим, як він працює в статтях. Можна знайти інформацію, яку шукаєте.
Тайсон

5
Поняття SSCCE насправді не застосовується до питань, які не стосуються коду.
Скотт

2
Не дублікат, але пов’язане з цим: superuser.com/questions/383732/how-does-ssh-encryption-work . Можна відповісти на другу частину питання (як використовуються приватні ключі)
Jay

Відповіді:


5

ssh-keygenгенерує як відкриті, так і приватні ключі, які спочатку розташовуються лише локально. Надання відкритого ключа іншому хосту - це те, що користувачеві потрібно буде зробити вручну, або надіславши його кому-небудь, відповідальному за сервер B, або якщо у вас є обліковий запис із паролем, ви можете увійти та ввести його там. Для того, щоб дозволити вхід без пароля на сервер B, вам потрібно буде додати ваш відкритий ключ у файл ~ / .ssh / санкціонований_кейс на сервері B (один відкритий ключ на рядок, у цьому файлі може бути будь-яка кількість ключів). Існує команда linux, ssh-copy-idяка скопіює для вас ідентифікатор і помістить його у файл.

За замовчуванням ssh використовуватиме файл ~ / .ssh / id_XXX як приватний ключ. XXX може бути rsa, dsa або будь-який протокол, для якого був створений ключ. IIRC, dsa старий і його не слід використовувати. Якщо ви хочете використовувати інший приватний ключ, ви можете вказати його у своїй команді ssh, використовуючи -i. Поки приватний ключ, який використовується, відповідає загальнодоступному ключу на віддаленій машині (у файлі санкціонованих ключів для облікового запису користувача, до якого ви входите), вам не потрібно буде вводити пароль.


Спасибі @BamaPookie - кілька наступних дій: (1) коли ssh-keygenзапускається, ти згадуєш , що дві клавіші "проживають лише локально"? Де?!? Як у, в якій папці я можу перейти та побачити id_rsa.pubта id_rsa? (2) Я думав, ssh-addце команда для додавання відкритого ключа authorized_keys, ні? Яка різниця між ssh-copy-idі ssh-add? Знову дякую!
user3178622

2
@ user3178622 re '1' У мене його немає перед собою, але це виглядає як ~/.ssh/id_rsa re '2', ssh-add не для додавання до санкціонованих_кейдів, це для додавання до брелка .. Я не використовував ssh -ад, хоча. ssh-add - це те, що ви не можете вводити ключову фразу щоразу, коли ви використовуєте ключ, який потребує ключової фрази. Отже, якщо для ваших ключів ssh не потрібна ключова фраза, то, мабуть, немає жодної причини використовувати ssh-add, і я думаю, вам все одно доведеться використовувати ssh-copy-id або вручну копіювати відкритий ключ у authorized_keys
barlop

2
ssh-keygen запитає вас, де зберегти файл, але розташування за замовчуванням знаходиться в ~ / .ssh / ssh-copy-id копіює відкритий ключ на віддалений хост. ssh-add додає приватний ключ у ваш локальний брелок. Додавання приватного ключа до локального ключового ключа означає, що він буде перевірятися за замовчуванням при спробі ssh-з'єднання (тобто без необхідності вказувати його за допомогою -i).
BamaPookie

1
@BamaPookie Там, де ви пишете "Додавання приватного ключа до локального ключового слова означає, що він буде перевірятися за замовчуванням при спробі з'єднання ssh (тобто без необхідності вказувати його за допомогою -i)." <--- Варто уточнити, що Я думаю, ви маєте на увазі, що він змінює вибраний приватний ключ за замовчуванням, так що замість id_rsa він виходить з keyring. (Звичайно, без ssh-add вам все-таки не потрібно вказувати приватний ключ з -i, він все одно матиме типовий параметр, просто інший за замовчуванням).
барлоп

3

Є дві машини Linux, A і B. Сценарії, що працюють на A, повинні мати змогу SSH в B. Отже, A генерує відкритий ключ (ймовірно, ssh-keygen-породжений id_rsa.pub), а потім використовує відповідний приватний ключ ( знову, ймовірно, id_rsa) для встановлення цього SSH-з'єднання.

Якщо щось, про що я говорив вище, невірно або введено в оману, почніть, виправляючи мене!

Якщо припустити, що я більш-менш мішень:

так

але B потрібний відкритий ключ A, щоб він був вказаний у файлі B-дозволених ключів, щоб A мав змогу підключитися до B

також ви можете видалити id_rsa.pub і ssh до B, і він все одно буде працювати, оскільки відкритий ключ генерується свіжим при кожному ssh-з'єднанні і не зберігається в жодному id_rsa.pub

Як "надає" Б свій відкритий ключ (id_rsa.pub)? Це має бути ручним процесом, чи його можна автоматизувати? Якщо вручну, який процес? Якщо автоматизована, яка команда?

посібник - щось подібне

від A-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

або навіть більше вручну, щоб зруйнувати команду

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

тоді на B переконайтесь, що ~ / .ssh існує, то зробіть cat a.a >> ~/.ssh/authorized_keys

і ви можете котувати дозволені_ ключі B до і після, щоб переконатися, що ключ вказаний.

Або ви можете надіслати електронною поштою id_rsa.pub до облікового запису електронної пошти, тоді з B, B можна перевірити електронну пошту та додати вміст id_rsa.pub у його файл дозволених ключів

автоматично

Команда ssh-copy-id

Потрібно мати можливість ввімкнути ssh, тому вам потрібен доступ до пароля

Замість того, щоб робити ssh user @ host, ви робите ssh-copy-id user @ host, і вам буде запропоновано пароль, ви вводите його, ви знаходитесь, він скопіює відкритий ключ. І наступного разу, коли ви зробите ssh user @ host, він використовуватиме ключ.

Коли B "отримує" цей відкритий ключ, куди він переходить або зберігається?

B's ~ / .ssh / санкціоновані_кейси

Коли ініціює з'єднання SSH з B, як A "використовує" його приватний ключ (id_rsa) як частину цього з'єднання?

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


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