# SSH Server

> Настройка SSH сервера на VyOS: безопасный удаленный доступ, аутентификация по ключам, контроль доступа, защита от brute-force для Yandex Cloud и VK Cloud

Source: https://opennix.org/docs/vyos/services/vyos-ssh/


SSH (Secure Shell) - криптографический сетевой протокол для безопасного удаленного управления системой VyOS.

## Обзор

SSH предоставляет:
- Защищенное удаленное подключение к CLI
- Шифрование всего трафика
- Аутентификацию по паролю или ключам
- Замену небезопасным протоколам (Telnet, rlogin)

По умолчанию SSH работает на порту 22/TCP.

## Базовая конфигурация

### Включение SSH

Минимальная конфигурация:

```
set service ssh
commit
```

SSH будет слушать на всех интерфейсах на порту 22.

### Указание порта

Изменение порта по умолчанию:

```
set service ssh port 2222
commit
```

### Привязка к адресу

Ограничение на конкретный IP-адрес:

```
set service ssh listen-address 192.168.1.1
commit
```

Множественные адреса:

```
set service ssh listen-address 192.168.1.1
set service ssh listen-address 10.0.0.1
set service ssh listen-address 2001:db8::1
commit
```

## Аутентификация

### Парольная аутентификация

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

Отключение парольной аутентификации:

```
set service ssh disable-password-authentication
commit
```

**Важно**: Перед отключением убедитесь, что настроена аутентификация по ключам!

### Аутентификация по SSH-ключам

#### Добавление публичного ключа для пользователя

```
set system login user admin authentication public-keys user@host key 'AAAAB3NzaC1yc2EAAAADAQABAAABAQC...'
set system login user admin authentication public-keys user@host type 'ssh-rsa'
commit
```

Типы ключей:
- `ssh-rsa` - RSA ключ
- `ssh-dss` - DSA ключ (устарел, не рекомендуется)
- `ecdsa-sha2-nistp256` - ECDSA 256-бит
- `ecdsa-sha2-nistp384` - ECDSA 384-бит
- `ecdsa-sha2-nistp521` - ECDSA 521-бит
- `ssh-ed25519` - Ed25519 (рекомендуется)

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

На Linux/macOS:
```bash
ssh-keygen -t ed25519 -C "user@vyos"
```

На Windows (PowerShell):
```powershell
ssh-keygen -t ed25519 -C "user@vyos"
```

Публичный ключ будет в файле `~/.ssh/id_ed25519.pub`.

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

С клиента Linux/macOS:
```bash
ssh-copy-id -i ~/.ssh/id_ed25519.pub vyos@192.168.1.1
```

Или вручную скопируйте содержимое `id_ed25519.pub` и добавьте через CLI.

### Отключение root login

Root login отключен по умолчанию начиная с VyOS 1.2+.

Проверка:
```
show service ssh
```

## Контроль доступа

### По пользователям

Разрешение только конкретным пользователям:

```
set service ssh access-control allow user admin
set service ssh access-control allow user operator
commit
```

Запрет конкретным пользователям:

```
set service ssh access-control deny user guest
commit
```

### По группам

Разрешение по группам:

```
set service ssh access-control allow group operators
commit
```

Запрет по группам:

```
set service ssh access-control deny group guests
commit
```

## Настройки безопасности

### Алгоритмы шифрования (Ciphers)

Указание разрешенных алгоритмов шифрования:

```
set service ssh ciphers 'chacha20-poly1305@openssh.com'
set service ssh ciphers 'aes256-gcm@openssh.com'
set service ssh ciphers 'aes128-gcm@openssh.com'
set service ssh ciphers 'aes256-ctr'
set service ssh ciphers 'aes192-ctr'
set service ssh ciphers 'aes128-ctr'
commit
```

Рекомендуемые современные алгоритмы:
- `chacha20-poly1305@openssh.com` - ChaCha20-Poly1305
- `aes256-gcm@openssh.com` - AES256-GCM
- `aes128-gcm@openssh.com` - AES128-GCM

Не рекомендуются (устаревшие):
- `3des-cbc` - Triple DES
- `aes128-cbc`, `aes192-cbc`, `aes256-cbc` - CBC режим
- `arcfour`, `arcfour128`, `arcfour256` - RC4

### MAC алгоритмы

Message Authentication Code алгоритмы:

```
set service ssh mac 'hmac-sha2-512-etm@openssh.com'
set service ssh mac 'hmac-sha2-256-etm@openssh.com'
set service ssh mac 'hmac-sha2-512'
set service ssh mac 'hmac-sha2-256'
commit
```

Рекомендуемые:
- `hmac-sha2-512-etm@openssh.com`
- `hmac-sha2-256-etm@openssh.com`
- `hmac-sha2-512`
- `hmac-sha2-256`

Не рекомендуются:
- `hmac-md5` - устарел
- `hmac-sha1` - считается слабым

### Key Exchange алгоритмы

Алгоритмы обмена ключами:

```
set service ssh key-exchange 'curve25519-sha256@libssh.org'
set service ssh key-exchange 'diffie-hellman-group-exchange-sha256'
set service ssh key-exchange 'ecdh-sha2-nistp521'
set service ssh key-exchange 'ecdh-sha2-nistp384'
set service ssh key-exchange 'ecdh-sha2-nistp256'
commit
```

Рекомендуемые:
- `curve25519-sha256@libssh.org`
- `curve25519-sha256`
- `diffie-hellman-group-exchange-sha256`
- `ecdh-sha2-nistp521`

Не рекомендуются:
- `diffie-hellman-group1-sha1` - устарел
- `diffie-hellman-group14-sha1` - устарел

### Host Key Validation

Отключение проверки host key (не рекомендуется для продакшена):

```
set service ssh disable-host-validation
commit
```

## Защита от brute-force атак

### Dynamic Protection

Автоматическая блокировка при превышении лимита неудачных попыток:

```
set service ssh dynamic-protection
commit
```

### Настройка параметров защиты

Количество попыток до блокировки:

```
set service ssh dynamic-protection threshold 3
commit
```

Время блокировки (секунды):

```
set service ssh dynamic-protection block-time 600
commit
```

### Whitelist адресов

Исключение доверенных адресов из защиты:

```
set service ssh dynamic-protection allow-from 192.168.1.0/24
set service ssh dynamic-protection allow-from 10.0.0.100
commit
```

## Примеры конфигурации

### Базовая безопасная конфигурация

```
# Основные настройки
set service ssh port 22
set service ssh listen-address 192.168.1.1

# Только ключевая аутентификация
set service ssh disable-password-authentication

# Контроль доступа
set service ssh access-control allow user admin
set service ssh access-control allow user operator

# Защита от brute-force
set service ssh dynamic-protection
set service ssh dynamic-protection threshold 3
set service ssh dynamic-protection block-time 600

commit
```

### Усиленная безопасность

```
# Нестандартный порт
set service ssh port 2222
set service ssh listen-address 192.168.1.1

# Только ключевая аутентификация
set service ssh disable-password-authentication

# Современные алгоритмы шифрования
set service ssh ciphers 'chacha20-poly1305@openssh.com'
set service ssh ciphers 'aes256-gcm@openssh.com'
set service ssh ciphers 'aes128-gcm@openssh.com'

# Современные MAC
set service ssh mac 'hmac-sha2-512-etm@openssh.com'
set service ssh mac 'hmac-sha2-256-etm@openssh.com'

# Современный key exchange
set service ssh key-exchange 'curve25519-sha256@libssh.org'
set service ssh key-exchange 'diffie-hellman-group-exchange-sha256'

# Контроль доступа
set service ssh access-control allow user admin

# Защита от атак
set service ssh dynamic-protection
set service ssh dynamic-protection threshold 2
set service ssh dynamic-protection block-time 1800
set service ssh dynamic-protection allow-from 192.168.1.0/24

commit
```

### Множественные порты и адреса

```
# Слушать на нескольких адресах
set service ssh port 22
set service ssh listen-address 192.168.1.1
set service ssh listen-address 10.0.0.1
set service ssh listen-address 2001:db8::1

# Контроль доступа
set service ssh access-control allow group operators

# Базовая защита
set service ssh dynamic-protection

commit
```

## Операционные команды

### Просмотр конфигурации

```
show service ssh
```

### Просмотр SSH fingerprints

```
show ssh server-fingerprints
```

### Перезапуск SSH

```
restart ssh
```

### Генерация серверных ключей

```
generate ssh server-key
```

### Просмотр активных сессий

```
show users
```

### Логи SSH

```
show log ssh
monitor log | grep sshd
```

## Подключение к VyOS

### С Linux/macOS

Стандартное подключение:
```bash
ssh vyos@192.168.1.1
```

С указанием порта:
```bash
ssh -p 2222 vyos@192.168.1.1
```

С указанием ключа:
```bash
ssh -i ~/.ssh/id_ed25519 vyos@192.168.1.1
```

### С Windows

PowerShell (Windows 10/11):
```powershell
ssh vyos@192.168.1.1
```

PuTTY:
1. Запустите PuTTY
2. Введите адрес: `192.168.1.1`
3. Порт: `22` (или ваш)
4. Connection type: SSH
5. Click "Open"

## Устранение неполадок

### Не могу подключиться

Проверьте статус SSH:
```
show service ssh
```

Проверьте firewall:
```
show firewall
```

Убедитесь что порт открыт:
```
show firewall ipv4 input filter
```

Проверьте, слушает ли SSH:
```
netstat -tlnp | grep sshd
```

### Отключил пароли и потерял доступ

Если есть консольный доступ:

```
configure
delete service ssh disable-password-authentication
commit
```

Если нет консольного доступа - потребуется физический доступ к устройству или восстановление из резервной копии.

### Проблемы с ключами

Проверьте формат ключа:
```
show system login user admin authentication public-keys
```

Проверьте логи:
```
show log ssh
```

Убедитесь что ключ правильного типа (RSA, Ed25519 и т.д.).

### Брандмауэр блокирует

Разрешите SSH в firewall:

```
set firewall ipv4 input filter rule 10 action accept
set firewall ipv4 input filter rule 10 destination port 22
set firewall ipv4 input filter rule 10 protocol tcp
set firewall ipv4 input filter rule 10 source address 192.168.1.0/24
commit
```

## Безопасность и лучшие практики

### 1. Используйте ключевую аутентификацию

Отключите пароли:
```
set service ssh disable-password-authentication
```

### 2. Измените порт по умолчанию

```
set service ssh port 2222
```

Это уменьшит количество автоматических атак.

### 3. Ограничьте доступ

По пользователям:
```
set service ssh access-control allow user admin
```

По адресам (через firewall):
```
set firewall ipv4 input filter rule 10 action accept
set firewall ipv4 input filter rule 10 destination port 22
set firewall ipv4 input filter rule 10 protocol tcp
set firewall ipv4 input filter rule 10 source address 192.168.1.0/24
```

### 4. Включите защиту от brute-force

```
set service ssh dynamic-protection
set service ssh dynamic-protection threshold 3
set service ssh dynamic-protection block-time 600
```

### 5. Используйте современные алгоритмы

Отключите устаревшие ciphers и MAC алгоритмы.

### 6. Мониторьте логи

Регулярно проверяйте SSH логи:
```
show log ssh
```

### 7. Используйте jump host

Для критичных систем используйте bastion host (jump server) вместо прямого доступа.

### 8. Регулярно обновляйте ключи

Пересоздавайте SSH ключи периодически (раз в 1-2 года).

### 9. Используйте сильные ключи

Ed25519 или RSA 4096-бит:
```bash
ssh-keygen -t ed25519
# или
ssh-keygen -t rsa -b 4096
```

### 10. Резервное копирование

Всегда сохраняйте резервную копию конфигурации:
```
save
```

## Интеграция с другими системами

### Jump Host / Bastion

Использование VyOS как jump host:

1. Разрешите port forwarding в sshd
2. Подключайтесь через ProxyJump:

```bash
ssh -J vyos@jumphost.example.com user@internal-server
```

### SSH Agent Forwarding

На клиенте добавьте в `~/.ssh/config`:

```
Host vyos-router
    HostName 192.168.1.1
    User vyos
    ForwardAgent yes
```

### SSH Certificates (CA)

Для больших инфраструктур используйте SSH Certificate Authority вместо индивидуальных ключей.

## Следующие шаги

- [HTTPS/API](/docs/vyos/services/vyos-https/) - веб-интерфейс и REST API
- [Firewall](/docs/vyos/firewall/) - настройка доступа к SSH
- [System Login](/docs/vyos/system/vyos-login/) - управление пользователями

