# Настройка SSH

## Сервер

Файл кофигурации `/etc/ssh/sshd_config`

### Базовая настройка

- `Port` (**22**) - порт, через который происходит подключение
- `PermitRootLogin` (yes|**no**) - подключение с использованием `root`-доступа
- `PubkeyAuthentication` (**yes**|no) - подключение с использованием ключа
- `PasswordAuthentication` (yes|**no**) - подключение с использованием пароля
- `PermitEmptyPasswords` (yes|**no**) - подключение с использованием пустого пароля

### Настройка файлов хранения публичных ключей:

Создание каталога в домашней директории пользователя (`/home/user/.ssh`), от которого будет происходить подключение к серверу:

```sh
mkdir ~/.ssh
chmod 700 ~/.ssh
```

Создание файла файла хранения публичных ключей:

```sh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```

### Перезагрузка сервера SSH

Перезагрузка сервера SSH в `Ubuntu`

```sh
sudo systemctl restart sshd
```

В других дистрибутивах:

```sh
sudo service sshd restart
```
```sh
sudo /etc/init.d/sshd restart
```

## Клиент

### Подключение к серверу

Стандартное подключение:

```sh
ssh user@host
```

например, по умолчанию, через `22` порт:

```sh
ssh alexander@192.168.56.150
```

или с другим портом:

```sh
ssh -p 2222 alexander@192.168.56.150
```

или с использованием ключа `~/.ssh/mykey`:

```sh
ssh -i ~/.ssh/mykey alexander@192.168.56.150
```

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

- `HostkeyAlgorithms`
- `PubkeyAcceptedKeyTypes`

Значения

- `ssh-rsa`
- `ssh-dsa`

```sh
ssh -i ~/.ssh/mykey -o HostkeyAlgorithms=ssh-rsa -o PubkeyAcceptedKeyTypes=ssh-rsa alexander@192.168.56.150
```

### Создание ключа

Ключи SSH используют алгоритмы:
- 🚨 `DSA` - это небезопасно и даже больше не поддерживается начиная с версии 7 `OpenSSH`.
- ⚠️ `RSA` - зависит от размера ключа. Если он имеет длину 3072 или 4096 бит, то все хорошо. 1024-битная длина считается небезопасной.
- `CD ECDSA` - зависит от того, насколько хорошо компьютер может генерировать случайное число, которое будет использоваться для создания подписи. Существует также проблема достоверности на кривых NIST, которые используются ECDSA.
- ✅ `Ed25519` - самый рекомендуемый алгоритм с открытым ключом, доступный сегодня.

Создание ключей выполняется через утилиту `ssh-keygen`. По умолчанию создаётся пара 2048-битных ключей `RSA`:

```sh
ssh-keygen
```

или

```sh
ssh-keygen -t rsa
```

Самый рекомендуемый способ создания ключа:

```sh
ssh-keygen -t ed25519
```

Использование дополнительных полей при создании пары ключей SSH RSA:

```sh
ssh-keygen -t rsa -b 4096 -C "alexander@zhirov.website" -f ~/.ssh/mykey -N password
```

- `-t rsa` - тип создаваемого ключа
- `-b 4096` - количество битов в ключе
- `-C "alexander@zhirov.website"` - комментарий, который будет добавлен в конец файла открытого ключа для идентификации
- `-f ~/.ssh/mykey` - имя файла закрытого ключа. В том же каталоге будет создан соответствующий файл открытого ключа с `.pub` в имени
- `-N password` - дополнительная парольная фраза, используемая для доступа к файлу закрытого ключа

### Файл конфигурации серверов

Настройка файла конфигурации серверов `~/.ssh/config`

```sh
Host myserver
    HostName 192.168.56.150
    User alexander
    Port 2222
    IdentityFile ~/.ssh/mykey
```

- `Host` - имя к подключаемому серверу (произвольное название)
    - `HostName` - адрес сервера
    - `User` - имя пользователя, от которого происходит подключение
    - `Port` - порт, по которому происходит подключение
    - `IdentityFile` - файл ключа, если подключение происходит с использованием ключа SSH

### Копирование ключа на сервер

После создания ключа `~/.ssh/mykey` необходимо зарегистрировать (добавить) его публичную версию `mykey.pub` на подключаемый сервер с использованием `ssh-copy-id`:

```sh
ssh-copy-id -i ~/.ssh/mykey.pub user@host
```

Добавление ключа с использованием дополнительных опций:

```sh
ssh-copy-id -i ~/.ssh/mykey.pub -p 2222 alexander@192.168.56.150
```

Добавления ключа вручную:

```sh
cat ~/.ssh/mykey.pub | ssh -p 2222 alexander@192.168.56.150 "cat >> ~/.ssh/authorized_keys"
```
