SSH

#SSH #Безопасность

SSH (Secure Shell) — способ работать на удалённой машине и передавать файлы по сети так, чтобы никто посторонний не прочитал и не подменил содержимое. Сегодня это основной инструмент администрирования: без него остаётся только физический доступ к машине.

Три вещи, которые SSH даёт сразу и без настройки:

  • подтверждение, что это та машина (ключ хоста и файл known_hosts);
  • шифрование всего обмена;
  • проверку целостности — подмена данных в пути обнаруживается.

Как это выглядит в работе

$ ssh user@server              # войти на машину
$ ssh user@server команда      # выполнить команду и вернуться
$ scp file user@server:/path/  # скопировать файл
$ sftp user@server             # файловый режим

При первом подключении SSH показывает отпечаток ключа хоста и просит подтвердить, что машина та самая. Это защита от подмены сервера, а не формальность: отпечаток стоит сверить из другого источника (у администратора, в документации), иначе подтверждение ничего не значит. Отпечаток хранится в ~/.ssh/known_hosts, и после переустановки сервера его приходится убирать руками.

Вход по ключу вместо пароля

Ключ надёжнее пароля: его нельзя подобрать перебором, и он не улетает на сервер.

Шаг Команда Что появляется
Создать пару ssh-keygen -t ed25519 ~/.ssh/id_ed25519 (закрытый) и .pub (открытый)
Передать открытый ключ на сервер ssh-copy-id user@server строка в ~/.ssh/authorized_keys на сервере
Не вводить пароль от ключа каждый раз ssh-agent + ssh-add ключ в памяти агента

Закрытый ключ не передаётся никому и никогда. Открытый можно и нужно — он для этого и открытый. Права на закрытый ключ должны быть 600, иначе SSH откажется его использовать.

Подробности: ssh-keygen, ssh-copy-id, ssh-agent.

Настройки: три файла и три роли

Файл Чей Что задаёт
/etc/ssh/sshd_config сервера Кто и как может к нему подключаться
/etc/ssh/ssh_config клиента, общий Настройки для всех пользователей машины
~/.ssh/config клиента, личный Удобные псевдонимы: ssh backup вместо длинной строки

Пример личного файла настроек, который экономит время каждый день:

Host backup
    HostName 10.0.0.5
    User backupuser
    Port 2222
    IdentityFile ~/.ssh/id_backup

После этого — ssh backup. Разбор файлов: sshd_config, ssh_config, ~/.ssh/config, authorized_keys, known_hosts.

Что происходит при подключении

Порядок шагов, который полезно представлять, когда «не пускает»: обмен версиями, обмен ключами (Диффи-Хеллман), проверка ключа хоста, аутентификация пользователя (ключ или пароль), затем шифрованный канал. Разбор: Алгоритм подключения к серверу.

Слои, из которых это собрано: алгоритмы обмена ключами, шифры, модуль moduli, ключ хоста. Для разбора строк в конфигурации есть обозначения и словарь.

Что настраивают в первую очередь на сервере

  • запретить вход по паролю (PasswordAuthentication no) — после того как вход по ключу проверен;
  • запретить вход root (PermitRootLogin no) — работать через обычного пользователя и sudo;
  • ограничить, кому можно (AllowUsers) — список имён вместо «пускать всех»;
  • сменить порт — не защита, а уменьшение шума в журнале от автоматических сканеров;
  • fail2ban — реакция на перебор.

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

Стандарты

Формат протокола описан в RFC, и они есть на сайте целиком: RFC 4251 (архитектура), RFC 4252 (аутентификация), RFC 4253 (транспорт), RFC 4254 (соединение), RFC 4250 (номера), RFC 4255 (отпечатки ключей в DNS), RFC 4419 (обмен группами Диффи-Хеллмана), RFC 3261 и его русский перевод.

Источники

  • man 1 ssh, man 5 ssh_config, man 5 sshd_config — клиент, его настройки и настройки сервера.
  • man 1 ssh-keygen, man 1 ssh-copy-id, man 1 ssh-agent, man 1 scp, man 1 sftp.
  • man 5 authorized_keys, man 5 known_hosts, man 5 moduli — форматы файлов.
  • RFC 4250–4255 — протокол.

Что ещё не проверено

  • Страницы подраздела написаны в разное время и в разном стиле: часть материалов — из старого кода, где команды не сверялись с текущими версиями. Переписываем их по одной; в этой странице-лице собраны только те команды, которые сегодня работают без изменений.
  • Примеры настройки сервера приведены без привязки к конкретной версии OpenSSH: проверять по man на своей системе и, главное, не закрывать старый вход, пока новый не проверен.
Оценка статьи 0

Комментарии

Пока комментариев нет.