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)"
eval "$(ssh-agent -s)"
Ця команда:
Запускає фоновий процес
ssh-agent
, який зберігає у пам’яті приватні ключі, які ти додаси до нього.-s
вказує на те, що він має вивести shell-команди для налаштування змінних середовища, зокремаSSH_AUTH_SOCK
іSSH_AGENT_PID
.eval
виконує ці команди, тобто встановлює ці змінні в поточному shell-сеансі.
Без цієї команди ssh-add
не знатиме, з яким агентом працювати — тобто не буде каналу зв'язку з агентом.
2. ssh-add ~/.ssh/olex
ssh-add ~/.ssh/olex
Ця команда:
Передає приватний ключ (
~/.ssh/olex
) агенту, щоб він міг надалі здійснювати аутентифікацію без введення пароля щоразу.Якщо ключ захищено passphrase’ом — як у тебе — доведеться ввести його один раз.
Після цього агент зберігає ключ у пам’яті до завершення сеансу (або до
ssh-add -d
/-D
).
Що буде, якщо не запускати eval "$(ssh-agent -s)"
, а лише ввести ssh-add ~/.ssh/olex
?
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