Справочник по SSH
1. Установка и настройка SSH-сервера (на стороне Linux)
Установка OpenSSH
Для Debian / Ubuntu серверная часть устанавливается пакетом openssh-server:
sudo apt update && sudo apt install -y openssh-server
Конфигурация безопасности (/etc/ssh/sshd_config)
Перед полным отключением паролей обязательно добавьте ваш публичный ключ на сервер (см. раздел 2 и 3) и проверьте вход в отдельном окне терминала!
Откройте главный конфигурационный файл:
sudo nano /etc/ssh/sshd_config
Рекомендуемые базовые параметры:
# Порт для входящих подключений (по умолчанию 22, смена снижает фоновый шум от сканеров)
Port 2222
Запрет прямого входа под root (вход только обычным пользователем с sudo)
PermitRootLogin no
Включение аутентификации по SSH-ключам
PubkeyAuthentication yes
Отключение аутентификации по паролю (ТОЛЬКО после проверки входа по ключу!)
PasswordAuthentication no
KbdInteractiveAuthentication no
Запрет входа пользователям без пароля
PermitEmptyPasswords no
Использование PAM-модулей
UsePAM yes
⚠️ Важная особенность Ubuntu 22.04+ и Debian 12 (Каталог sshd_config.d)
В современных дистрибутивах и облачных образах настройки из каталога /etc/ssh/sshd_config.d/*.conf переопределяют главный файл sshd_config.
В частности, файл 50-cloud-init.conf часто принудительно возвращает PasswordAuthentication yes. Обязательно проверьте наличие переопределений:
ls -la /etc/ssh/sshd_config.d/
Если там есть файлы (например, 50-cloud-init.conf), откройте их и также выставьте PasswordAuthentication no, либо удалите/закомментируйте конфликтную строку.
Проверка синтаксиса и перезапуск службы
Перед перезапуском обязательно протестируйте конфигурацию на ошибки:
sudo sshd -t
Если команда ничего не вывела — конфигурация корректна.
Перезапустите службу SSH (не закрывая текущую сессию!):
# Для Ubuntu / Debian:
sudo systemctl restart ssh
Для RHEL / CentOS / AlmaLinux / Rocky:
sudo systemctl restart sshd
2. Генерация SSH-ключей на стороне клиента
Вариант А: В MobaXterm (Windows)
- В верхнем меню откройте Tools → MobaKeyGen (SSH key generator).
- Внизу выберите тип ключа Ed25519 (рекомендуется) или RSA (с длиной не менее
4096бит). - Нажмите кнопку Generate и двигайте курсором мыши по пустому полю для создания случайных данных.
- (Рекомендуется) В поле Key passphrase введите пароль для защиты самого приватного ключа.
- Нажмите Save private key и сохраните файл
.ppkв надежное место на ПК. - Скопируйте всю строку открытого ключа из верхнего поля под надписью «Public key for pasting into OpenSSH authorized_keys file».
Настройка подключения в MobaXterm: Нажмите Session → SSH, укажите Remote host и Username. Перейдите во вкладку Advanced SSH settings, отметьте Use private key и укажите путь к сохраненному .ppk.
Вариант Б: В PuTTY / PuTTYgen (Windows)
- Запустите утилиту PuTTYgen.
- Выберите тип ключа Ed25519 или RSA (4096 бит).
- Нажмите Generate и поводите мышью.
- Укажите парольную фразу (Key passphrase), если требуется.
- Нажмите Save private key для сохранения
.ppkфайла. - Скопируйте текст публичного ключа из верхнего окна (начинается на
ssh-ed25519...илиssh-rsa...).
Настройка подключения в PuTTY: В окне PuTTY перейдите в Connection → SSH → Auth → Credentials (или Auth в старых версиях), в поле Private key file for authentication укажите ваш .ppk файл. Вернитесь в Session, введите IP-адрес и сохраните сессию.
Вариант В: Через консоль Linux / macOS / WSL
- Сгенерируйте пару ключей командой:
(или для RSA:ssh-keygen -t ed25519 -C "your_email_or_comment"ssh-keygen -t rsa -b 4096) - Нажмите Enter для сохранения пути по умолчанию (
~/.ssh/id_ed25519) и при необходимости задайте кодовую фразу. - Автоматически скопируйте публичный ключ на сервер:
(ключssh-copy-id -p 22 username@your_server_ip-pуказывается, если порт SSH нестандартный).
3. Ручная установка публичного ключа и права доступа на сервере
Если утилита ssh-copy-id недоступна (например, при генерации через MobaXterm или PuTTY), добавьте ключ вручную.
Критически важно: SSH строго проверяет права на каталоги и файлы ключей. Если права выставлены неправильно (например, доступны для записи другим пользователям), служба безопасности OpenSSH заблокирует вход по ключу.
- Создайте папку
.sshв домашнем каталоге пользователя и задайте строгие права (только владелец):mkdir -p ~/.ssh chmod 700 ~/.ssh - Создайте или откройте файл
authorized_keys:nano ~/.ssh/authorized_keys - Вставьте скопированный публичный ключ (всю строку целиком, без переносов). Сохраните файл (
Ctrl+O,Enter,Ctrl+X). - Установите права на чтение и запись только для владельца:
chmod 600 ~/.ssh/authorized_keys - (Опционально) Если вы настраивали ключи под
rootдля другого пользователя, передайте ему права владения:sudo chown -R username:username /home/username/.ssh
4. Практические примеры подключения и сценарии использования
1. Стандартное подключение
ssh username@your_server_ip
2. Подключение с нестандартным портом
ssh -p 2222 username@your_server_ip
3. Подключение с явным указанием приватного ключа
ssh -i ~/.ssh/my_custom_key username@your_server_ip
4. Удобное использование файла конфигурации клиента (~/.ssh/config)
Чтобы не запоминать IP-адреса, порты и пути к ключам на Linux/macOS/WSL, создайте файл ~/.ssh/config:
Host prod-server
HostName 198.51.100.25
User debian
Port 2222
IdentityFile ~/.ssh/id_ed25519
Теперь подключение выполняется короткой командой:
ssh prod-server
5. Копирование файлов и директорий (SCP и Rsync)
Копирование одного файла:
scp -P 2222 /path/to/local/file.txt username@your_server_ip:/path/to/remote/dir/
Синхронизация папки с докачкой через Rsync (быстрее и надежнее для больших объемов):
rsync -avz -e "ssh -p 2222" --progress /path/to/local/project/ username@your_server_ip:/var/www/project/
6. Локальный проброс порта (SSH Tunneling к внутренней БД)
Позволяет подключиться к удаленной базе данных (например, PostgreSQL на 5432), доступ к которой из интернета закрыт фаерволом:
ssh -L 5433:localhost:5432 -p 2222 username@your_server_ip
После этого локальный клиент базы данных подключается к localhost:5433.
7. Удаленный проброс порта (Показ локального сервиса наружу)
Позволяет перенаправить трафик с порта сервера на ваш локальный порт (например, демонстрация локального веб-приложения на порту 3000):
ssh -R 8080:localhost:3000 -p 2222 username@your_server_ip
8. Обратный SSH-туннель (Доступ к машине за NAT / серым IP)
На компьютере за NAT (домашний ПК или внутренний сервер):
ssh -N -R 9090:localhost:22 user_on_vps@public_vps_ip
Теперь, зайдя на публичный сервер public_vps_ip, можно попасть на машину за NAT командой:
ssh -p 9090 user_on_home_pc@localhost