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