OpenSSH: различия между версиями
Editor (обсуждение | вклад) подробнее описана работа с ssh-keygen |
Editor (обсуждение | вклад) подробнее описана работа с ssh-agent и ssh-add |
||
| Строка 12: | Строка 12: | ||
* ssh — клиент | * ssh — клиент | ||
* ssh-keygen — утилита для генерирования ключей и управления ими | * ssh-keygen — утилита для генерирования ключей и управления ими | ||
* ssh-agent — приложение для хранения ключей в памяти | * ssh-agent — приложение для хранения расшифрованных ключей в памяти | ||
* ssh-add — утилита для добавления ключа для использования в ssh-agent | |||
* scp — утилита для безопасного копирования файлов, аналогичная утилите копирования cp | * scp — утилита для безопасного копирования файлов, аналогичная утилите копирования cp | ||
* sftp — утилита для безопасной передачи файлов, аналогичная ftp-клиенту | * sftp — утилита для безопасной передачи файлов, аналогичная ftp-клиенту | ||
| Строка 40: | Строка 41: | ||
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub -E 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 или удаления из него информации о ключе). | |||
Версия от 00:53, 19 февраля 2024
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 или удаления из него информации о ключе).