Для того, щоб швидко і без пароля логінитися на 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-сеансу), то:
І додати ключ не вдасться.
Висновок:
ssh-agent — це обов’язкова умова для використання ssh-add, бо він зберігає ключі в пам’яті.
eval "$(ssh-agent -s)" запускає агента і дозволяє системі знати, куди передавати ключ.
Якщо цього не зробити, ssh-add не працюватиме (або працюватиме лише в специфічних середовищах, де агент вже активний і змінні встановлено автоматично).
Якщо хочеш автоматизувати це при вході в систему, можу допомогти прописати це в ~/.bash_profile, ~/.bashrc, ~/.profile чи systemd-юніт.