> For the complete documentation index, see [llms.txt](https://surftest.gitbook.io/axelar-wiki/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://surftest.gitbook.io/axelar-wiki/russian/bezopasnost/2fa-dlya-ssh.md).

# 2FA для SSH

Если вы уже поставили [вход на сервер по SSH ключу](/axelar-wiki/russian/bezopasnost/vkhod-po-ssh-klyuchu-+-otklyuchenie-parolya.md), из предыдущего этапа, то данный пункт можно пропустить.

Но можно и настроить дополнительную защиту. 2FA - это пароли на основе времени. Этот метод не распространен, но [считается](https://www.linode.com/docs/guides/use-one-time-passwords-for-two-factor-authentication-with-ssh-on-ubuntu-16-04-and-debian-8) надежной защитой.&#x20;

### Настройка Timezone

Часовой пояс по умолчанию установлен на UTC. Это можно изменить, установив часовой пояс в котором вы живете, чтобы использовать программы, привязанные к вашему локальному времени, а так же чтобы логи сервера отображались в понятном для вас времени. Для этого выполним:

1\. Выберим из списка и скопируем нужную нам таймзону. Открываем список:&#x20;

```
timedatectl list-timezones
```

2\. Теперь используем стрелки клавиатуры `Page Up`, и `Page Down` чтобы просматривать список. Копируем нужный часовой пояс и чтобы выйти из списка нажимаем `q` (или `ctrl`+`c`)чтобы выйти из списка.

3\. Устанавливаем таймзону (я для примера взял `'Etc/GMT+4'`):

```
timedatectl set-timezone 'Etc/GMT+4'
```

### Установка Google Authenticator

Введем команду установки Google Authenticator:

```
sudo apt-get install libpam-google-authenticator
```

Эта программа генерирует на сервере ключи, а после сканирования штрих кода будет отображаться пароль для входа на телефоне.

### Генерация ключа.

{% hint style="warning" %}
Перед генерацией ключа - установите на телефон приложение [Google Authenticator](https://en.wikipedia.org/wiki/Google_Authenticator) или [Authy](https://www.authy.com/).\
\
А так же проверьте, что часовой пояс телефона совпадает с установленным на сервере.    &#x20;
{% endhint %}

1\. Введем команду генерации ключей:&#x20;

```
google-authenticator
```

Появится вопрос. Надо выбрать time-based ключ, введя `y`. <img src="https://524528777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff8kEXtTHjW0sndWFpCyO%2Fuploads%2F0rVD24EhNJNrrtD3dt8f%2Fimage.png?alt=media&amp;token=a0c6dc8b-a871-4618-9bc1-198065a68995" alt="" data-size="original">

2\. Получили **QR-код,** **secret key** и **emergency scratch codes.** Надо отсканировать **QR-код** приложенем Google 2FA, либо вбить в приложение **secret key** вручную.\
**Emergency scratch codes** (5 штук) просто сохраним или запишем на бумаге. Они нужны на случай, если мы потеряли телефон (они одноразовые!). \ <img src="https://524528777-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Ff8kEXtTHjW0sndWFpCyO%2Fuploads%2Fe4i1FwBT20TnTriVTCW9%2Fimage.png?alt=media&amp;token=c0cdec84-804c-4c43-838f-41de8a952b73" alt="" data-size="original">

Теперь отвечаем на вопросы:

1\) `Do you want me to update your "/home/exampleuser/.google_authenticator" file (y/n)`\
**Отвечаем** `y`

2\) `Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n)`\
**Отвечаем** `y`

3\) `By default, tokens are good for 30 seconds and in order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of 1:30min to about 4min. Do you want to do so (y/n)`\
**Отечаем** `n`

4\) `If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting (y/n)`

**Отвечаем** `y`

### Настройка конфигурации

Для корректной работы google-authenticator , нам потребуется [PAM](http://www.linux-pam.org/) ([Pluggable Authentication Modules for Linux](http://www.linux-pam.org/whatispam.html)).

{% hint style="warning" %}
На этом этапе важно открыть два сеанса putty, так как скоро, для проверки 2FA, нам нужно будет войти на сервер заново. И если мы не сможем залогиниться на сервер по 2FA, то в открытом сеансе сможем решить проблему.\
Так же проблему можно будет решить через консоль личного кабинета провайдера.
{% endhint %}

#### Редактирование файла /etc/pam.d/sshd

Открываем файл /etc/pam.d/sshd :

```
sudo nano /etc/pam.d/sshd
```

В конце файла вставляем строки:

```
auth    required      pam_unix.so     no_warn try_first_pass
auth    required      pam_google_authenticator.so
```

Где первая строка сообщает для PAM что вначале надо запросить пароль!\
Во второй строке задается требование о дополнительной верификации - google\_authenticator.

#### Редактирование файла /etc/ssh/sshd\_config

В этом файле нам также требуется прописать дополнительное требование  верификации.&#x20;

Найдите строку ChallengeResponseAuthentication no. Нужно установить ее значение в yes:

```
ChallengeResponseAuthentication yes
```

Вместо `example-user` вставьте нужного вам пользователя. Допустим `root` И вставьте измененные строки вконец файла:

```
Match User example-user
    AuthenticationMethods keyboard-interactive
```

Если нужно включить 2FA для остальных пользователей - вставьте блок выше для каждого пользователя ( и изменив `example-user`).&#x20;

Перезагрузим сервис sshd и все готово:

```
sudo systemctl restart sshd
```

Теперь При входе на сервер сначала нужно будет вводить пароль, а затем код двухфакторной аутентификации. 🎉
