# 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`-юніт.
