Skip to main content

Справочник по 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)

  1. В верхнем меню откройте ToolsMobaKeyGen (SSH key generator).
  2. Внизу выберите тип ключа Ed25519 (рекомендуется) или RSA (с длиной не менее 4096 бит).
  3. Нажмите кнопку Generate и двигайте курсором мыши по пустому полю для создания случайных данных.
  4. (Рекомендуется) В поле Key passphrase введите пароль для защиты самого приватного ключа.
  5. Нажмите Save private key и сохраните файл .ppk в надежное место на ПК.
  6. Скопируйте всю строку открытого ключа из верхнего поля под надписью «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)

  1. Запустите утилиту PuTTYgen.
  2. Выберите тип ключа Ed25519 или RSA (4096 бит).
  3. Нажмите Generate и поводите мышью.
  4. Укажите парольную фразу (Key passphrase), если требуется.
  5. Нажмите Save private key для сохранения .ppk файла.
  6. Скопируйте текст публичного ключа из верхнего окна (начинается на ssh-ed25519... или ssh-rsa...).

Настройка подключения в PuTTY: В окне PuTTY перейдите в Connection → SSH → Auth → Credentials (или Auth в старых версиях), в поле Private key file for authentication укажите ваш .ppk файл. Вернитесь в Session, введите IP-адрес и сохраните сессию.

Вариант В: Через консоль Linux / macOS / WSL

  1. Сгенерируйте пару ключей командой:
    ssh-keygen -t ed25519 -C "your_email_or_comment"
    (или для RSA: ssh-keygen -t rsa -b 4096)
  2. Нажмите Enter для сохранения пути по умолчанию (~/.ssh/id_ed25519) и при необходимости задайте кодовую фразу.
  3. Автоматически скопируйте публичный ключ на сервер:
    ssh-copy-id -p 22 username@your_server_ip
    (ключ -p указывается, если порт SSH нестандартный).

3. Ручная установка публичного ключа и права доступа на сервере

Если утилита ssh-copy-id недоступна (например, при генерации через MobaXterm или PuTTY), добавьте ключ вручную.

Критически важно: SSH строго проверяет права на каталоги и файлы ключей. Если права выставлены неправильно (например, доступны для записи другим пользователям), служба безопасности OpenSSH заблокирует вход по ключу.

  1. Создайте папку .ssh в домашнем каталоге пользователя и задайте строгие права (только владелец):
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
  2. Создайте или откройте файл authorized_keys:
    nano ~/.ssh/authorized_keys
  3. Вставьте скопированный публичный ключ (всю строку целиком, без переносов). Сохраните файл (Ctrl+O, Enter, Ctrl+X).
  4. Установите права на чтение и запись только для владельца:
    chmod 600 ~/.ssh/authorized_keys
  5. (Опционально) Если вы настраивали ключи под 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