ssh-agent

Для того, щоб швидко і без пароля логінитися на github, заходити на сервер - я ввожу такі команди:

$ eval "$(ssh-agent -s)"
Agent pid 6486

$ ssh-add ~/.ssh/olex
Enter passphrase for /home/olex/.ssh/olex: 
Identity added: /home/olex/.ssh/olexsyn (olex@somemail.com)

Що роблять ці команди і що зміниться, якщо не вводити першу, а тільки другу?


Розберімо детально, що робить кожна з команд:


1. eval "$(ssh-agent -s)"

Ця команда:

  • Запускає фоновий процес ssh-agent, який зберігає у пам’яті приватні ключі, які ти додаси до нього.

  • -s вказує на те, що він має вивести shell-команди для налаштування змінних середовища, зокрема SSH_AUTH_SOCK і SSH_AGENT_PID.

  • eval виконує ці команди, тобто встановлює ці змінні в поточному shell-сеансі.

Без цієї команди ssh-add не знатиме, з яким агентом працювати — тобто не буде каналу зв'язку з агентом.


2. ssh-add ~/.ssh/olex

Ця команда:

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

  • Якщо ключ захищено passphrase’ом — як у тебе — доведеться ввести його один раз.

  • Після цього агент зберігає ключ у пам’яті до завершення сеансу (або до ssh-add -d/-D).


Що буде, якщо не запускати eval "$(ssh-agent -s)", а лише ввести ssh-add ~/.ssh/olex?

  • Якщо агент вже запущений і SSH_AUTH_SOCK уже встановлено (наприклад, якщо середовище графічне або ти вже запускала ssh-agent раніше), то ssh-add може спрацювати.

  • Якщо ж ssh-agent не запущено, або змінні середовища не встановлено (що типово для нового shell-сеансу), то:

    Could not open a connection to your authentication agent.

    І додати ключ не вдасться.


Висновок:

  • ssh-agent — це обов’язкова умова для використання ssh-add, бо він зберігає ключі в пам’яті.

  • eval "$(ssh-agent -s)" запускає агента і дозволяє системі знати, куди передавати ключ.

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

Якщо хочеш автоматизувати це при вході в систему, можу допомогти прописати це в ~/.bash_profile, ~/.bashrc, ~/.profile чи systemd-юніт.

Last updated