OpenSSH

Материал из SysWiki
Версия от 00:53, 19 февраля 2024; Editor (обсуждение | вклад) (подробнее описана работа с ssh-agent и ssh-add)

OpenSSH — набор приложений для защищённой передачи данных, включающий в себя и клиентскую, и серверную часть. Является фактическим стандартом для Linux и многих других UNIX-подобных операционных систем.

Установка

Как правило, OpenSSH устанавливается при установке системы. В случае его отсутствия он может быть установлен следующей командой (на примере Debian GNU/Linux, установка и клиентской и серверной части):

apt install openssh-client openssh-server

Приложения, входящие в состав OpenSSH

В состав OpenSSH в частности входят следующие приложения:

  • sshd — сервер
  • ssh — клиент
  • ssh-keygen — утилита для генерирования ключей и управления ими
  • ssh-agent — приложение для хранения расшифрованных ключей в памяти
  • ssh-add — утилита для добавления ключа для использования в ssh-agent
  • scp — утилита для безопасного копирования файлов, аналогичная утилите копирования cp
  • sftp — утилита для безопасной передачи файлов, аналогичная ftp-клиенту

sshd

Программа sshd является сервером SSH. Как правило, запускается автоматически. Основной конфигурационный файл сервера — это обычно /etc/ssh/sshd_config. Ошибки в конфигурации sshd могут привести к потере возможности подключения к удалённому серверу, редактировать этот файл при удалённом подключении следует с осторожностью, хотя обычно, при перезапуске OpenSSH с новым конфигурационным файлом старые соединения сохраняются, это, с одной стороны, даёт возможность исправить ошибку, а, с другой, следует помнить, что работа текущего соединения после перезапуска сервера не означает, что конфигурация правильная, следует убедиться, возможны ли новые подключения.

ssh

Программа ssh является клиентом для подключения к SSH-серверу. Это наиболее часто используемая программа из набора приложений OpenSSH. Кроме предоставления доступа к командной оболочке удалённого сервера она также позволяет создавать защищённые туннели.

ssh-keygen

Программа ssh-keygen предназначена для генерирования криптографических пар ключей, используемых для аутентификации вместо паролей. Пример генерации криптографической пары ключей:

ssh-keygen -t ed25519 -C 'My personal key'

Здесь при помощи параметра -t указан тип ключа, при помощи параметра -C указан комментарий, который будет добавлен в открытый ключ.

После запуска приложение запросит имя файла для сохранения секретного ключа, это будет файл .ssh/id_ed25519 в домашнем каталоге пользователя (т..е полный путь может выглядеть примерно так: /home/user/.ssh/id_ed25519), обычно нет необходимости его менять (если только уже не существует другой ключ, находящийся в том файле). Далее будет запрошен пароль и, далее, подтверждение пароля. Пароль будет невозможно сбросить, если вы его забудете, при этом хорошим тоном является установка стойкого к подбору пароля достаточной длины.

Также эта утилита позволяет посмотреть отпечаток ключа сервера. Когда вы впервые подключаетесь к серверу SSH, то клиентское приложение показывает вам отпечаток ключа сервера, и вам следует сравнить его с реальным отпечатком ключа сервера, во избежание атаки типа MITM. Администратор сервера может посмотреть отпечаток ключа командой вида:

ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub

В этой команде первый ключ -l означает просмотр отпечатка, после ключа -f идёт путь к открытому ключу, они по умолчанию имеют имена вида /etc/ssh/ssh_host_TYPE_key.pub, где вместо TYPE стоит тип ключа (rsa, ed25519 и т.д.).

Иногда клиентское приложение выводит отпечаток ключа не в том виде, в котором вы его ожидаете увидеть. Например, отпечаток вы ожидаете увидеть как непрерывную строку алфавитно-цифровых символов, а клиент SSH показывает строку байт в шестнадцатеричном виде, разделённых двоеточиями. В таких случаях нужно выбрать формат, в котором программа выдаст информацию об отпечатке ключа, это делается при помощи ключа -E. Вот например как выглядит команда получения информации о ключе RSA, с выводом отпечатка ключа, полученного по алгоритму MD5:

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub -E md5

ssh-agent и ssh-add

Если вы используете аутентификацию по ключу, то вам может потребоваться каждый раз вводить пароль от ключа при подключении к удалённому хосту. Это не очень удобно, при этом убирать пароль не рекомендуется из соображений безопасности. Для упрощения работы можно использовать пару утилит: ssh-agent и ssh-add, первая из них служит для хранения информации о расшифрованных ключах, а вторая — добавляет в неё информацию о ключах.

ssh-agent

Утилита ssh-agent служит для сохранения открытого ключа в расшифрованном виде между подключениями. Данное приложение запускается не совсем обычным образом (в примере предполагается использование командной оболочки bash):

eval $(ssh-agent -s)

Смысл этой конструкции в следующем. При вызове ssh-agent -s программа запускает фоновый процесс для работы с ключами, информация для подключения к нему выводится в формате команд оболочки (установка значений нескольких переменных и т.д.), а при помощи конструкции eval $(...) тот код выполняется в контексте текущей командной оболочки. Конечным результатом является установка переменных SSH_AGENT_PID и SSH_AUTH_SOCK, содержащих данные для подключения к ssh-agent. Эти данные будут нужны утилите ssh-add.

ssh-add

Утилита ssh-add добавляет данные заданного ключа в фоновый процесс ssh-agent (который должен быть запущен ранее). Утилита обычно используется в таком формате:

ssh-add ~/.ssh/id_ed25519

Команда запросит пароль к заданному ключу. После чего ключ можно будет использовать без ввода пароля (до завершения процесса ssh-agent или удаления из него информации о ключе).