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на своей системе и, главное, не закрывать старый вход, пока новый не проверен.
Комментарии
Пока комментариев нет.