Skip to main content

Справочник по SSH

1. Установка и базовая настройка

Установка SSH-сервера (на сервере)

Для Debian/Ubuntu серверная часть SSH устанавливается пакетом `openssh-server`.

sudo apt update && sudo apt install -y openssh-server

Настройка и безопасность (`/etc/ssh/sshd_config`)

Это главный конфигурационный файл SSH-сервера. После внесения изменений **необходимо перезапустить службу**: sudo systemctl restart sshd. Ниже приведен пример безопасной конфигурации.

#Порт, на котором слушает SSH. 22 - стандарт. Для безопасности рекомендуется сменить.
Port 2222

#Запретить вход для пользователя root. Всегда используйте обычного пользователя с sudo. PermitRootLogin no

#Максимальное количество попыток ввода пароля перед разрывом соединения. MaxAuthTries 3

#Отключить аутентификацию по паролю (самый важный шаг для безопасности!). #После этого вход будет возможен ТОЛЬКО по SSH-ключу. PasswordAuthentication no

#Включить аутентификацию по ключам. PubkeyAuthentication yes

#Путь к файлу с разрешенными публичными ключами. AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2

#Запретить вход пользователям с пустыми паролями. PermitEmptyPasswords no

#Использовать PAM (Pluggable Authentication Modules). Важно для многих систем. UsePAM yes

Ситуация из жизни: Вы настраиваете новый сервер в интернете. Первым делом после установки ОС вы заходите по временному паролю, настраиваете `sshd_config` как в примере, добавляете свой SSH-ключ (см. раздел 2) и перезапускаете SSH. Только после этого сервер можно считать минимально защищенным.

2. Работа с SSH-ключами (PublicKey Authentication)

Шаг А: Генерация ключей (на вашем компьютере)

Эта команда создает пару ключей: приватный (`id_rsa`), который нужно хранить в секрете, и публичный (`id_rsa.pub`), который вы будете копировать на серверы.

ssh-keygen -t rsa -b 4096

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

Шаг Б: Копирование публичного ключа на сервер

Самый простой и безопасный способ — использовать утилиту `ssh-copy-id`. Она сама создаст нужные файлы и установит правильные права доступа на сервере.

ssh-copy-id username@your_server_ip

Ситуация из жизни: Вы получили доступ к новому рабочему серверу. Чтобы не вводить пароль каждый раз и повысить безопасность, вы одной этой командой прописываете свой ключ на сервере. После этого можно отключать парольную аутентификацию.

3. Примеры подключения и использования

1. Простое подключение

Стандартный способ подключения с использованием вашего ключа по умолчанию.

ssh username@your_server_ip

2. Подключение на нестандартный порт

Используется, если вы изменили порт в `sshd_config` для повышения безопасности.

ssh -p 2222 username@your_server_ip

3. Подключение с указанием конкретного ключа

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

ssh -i ~/.ssh/my_other_key username@your_server_ip

4. Копирование файла на сервер (SCP)

Простой способ загрузить файл на удаленный сервер.

scp /path/to/local/file.txt username@your_server_ip:/path/to/remote/directory/

5. Копирование папки с сервера (SCP)

Ключ `-r` (рекурсивно) позволяет скопировать целый каталог.

scp -r username@your_server_ip:/path/to/remote/directory /path/to/local/destination

6. Синхронизация каталогов (rsync)

Rsync — более мощный инструмент, чем scp. Он копирует только измененные файлы, что идеально для бэкапов и развертывания сайтов.

rsync -avz --progress /path/to/local/project/ username@your_server_ip:/var/www/project

7. Локальный проброс порта (доступ к удаленной БД)

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

ssh -L 5433:localhost:5432 username@your_server_ip

Ситуация из жизни: На сервере работает PostgreSQL на порту 5432, но доступ к нему извне закрыт брандмауэром. Эта команда "пробрасывает" удаленный порт 5432 на ваш локальный порт 5433. Теперь вы можете подключиться к `localhost:5433` вашим любимым GUI-клиентом для баз данных.

8. Удаленный проброс порта (показать локальный проект)

Позволяет сделать ваш локальный веб-сервер доступным через публичный IP вашего удаленного сервера.

ssh -R 8080:localhost:3000 username@your_server_ip

Ситуация из жизни: Вы разработали веб-приложение на своем ноутбуке (на порту 3000) и хотите показать его коллеге. Эта команда делает так, что при обращении к `your_server_ip:8080` трафик будет перенаправляться на ваш ноутбук.

9. Использование файла конфигурации (~/.ssh/config)

Чтобы не вводить каждый раз длинные команды, можно создать файл конфигурации. Создайте файл `~/.ssh/config` и добавьте в него блок:

Host my-prod-server
    HostName your_server_ip
    User your_username
    Port 2222
    IdentityFile ~/.ssh/prod_key

После этого для подключения достаточно выполнить короткую команду:

ssh my-prod-server

10. Обратный SSH-туннель (доступ к машине за NAT)

Это продвинутый метод, позволяющий получить доступ к компьютеру, который находится за роутером или брандмауэром (например, ваш домашний ПК).

На домашнем ПК (за NAT) выполните:

ssh -R 9090:localhost:22 user_on_public_server@public_server_ip

Эта команда говорит: "Подключись к публичному серверу и сделай так, чтобы трафик, приходящий на его порт 9090, перенаправлялся на мой локальный 22 порт".

Теперь, находясь на публичном сервере, вы можете подключиться к своему домашнему ПК:

ssh -p 9090 user_on_home_pc@localhost