Введение

Программа для установления соединений Secure Shell

Secure Shell (SSH) — это протокол, позволяющий безопасно осуществлять удалённый вход в компьютер в сети с использованием криптографии с открытым ключом. Клиентские программы SSH (например, ssh из OpenSSH) обычно работают на протяжении всего сеанса удалённого подключения и настроены на поиск приватного ключа пользователя в файле в домашней директории пользователя (например, ssh/id_rsa). Для повышения безопасности (например, от злоумышленника, способного читать любые файлы в локальной файловой системе), приватный ключ обычно хранится в зашифрованном виде, где ключ шифрования генерируется на основе парольной фразы, которую пользователь запомнил. Поскольку ввод парольной фразы может быть обременительным, многие пользователи предпочитают вводить её лишь однажды за сеанс локального входа. Наиболее безопасное место для хранения незашифрованного ключа — это память программы, а в Unix-подобных операционных системах память обычно связана с процессом. Обычный клиентский процесс SSH не может использоваться для хранения незашифрованного ключа, поскольку процессы SSH-клиента существуют только в течение сеанса удалённого подключения. Поэтому пользователи запускают программу ssh-agent, которая работает дольше, чем длительность локального сеанса входа, хранит незашифрованные ключи в памяти и взаимодействует с SSH-клиентами через Unix domain socket.

Вопросы безопасности

Агент ssh создает сокет и затем проверяет подключения от ssh. Любой, кто может подключиться к этому сокету, также получает доступ к агенту ssh. Права доступа устанавливаются как в обычной системе Linux или Unix. При запуске агент создает новый каталог в /tmp с ограниченными правами доступа. Сокет располагается в этом каталоге. Существует механизм, который может предотвратить использование сокета ssh-агента вредоносным ПО. Если при импорте ключей в ssh-агент указана опция `ssh add -c`, то агент запрашивает подтверждение у пользователя с помощью программы, указанной в переменной окружения `SSH_ASKPASS`, каждый раз, когда ssh пытается подключиться. Агенты ssh могут быть "перенаправлены" на сервер, к которому вы подключаетесь, что делает их ключи доступными и для других подключений. На локальной системе важно, чтобы пользователь root был надежным, поскольку он может, в частности, напрямую прочитать файл ключа. На удаленной системе, если соединение с ssh-агентом перенаправлено, также важно, чтобы пользователь root на другом конце был надежным, так как он может получить доступ к сокету агента на удаленной машине (хотя сам ключ остается локальным).

Реализация

Существует множество различных программ, выполняющих ту же функцию, что и агент ssh OpenSSH, некоторые с существенно отличающимися пользовательскими интерфейсами. Например, PuTTY использует графический интерфейс в своем комплекте Pageant ssh-агента. Есть инструменты, разработанные для обеспечения функциональности ключевого агента как для симметричных, так и для асимметричных ключей; они обычно предоставляют функциональность ssh-агента как один из своих интерфейсов приложений. К ним относятся GNOME Keyring и KWallet. Некоторые монолитные SSH-клиенты обладают возможностью запоминать парольные фразы SSH между сеансами. Примером является SecureCRT.

Apple macOS

На операционной системе macOS ssh-агент встроен начиная с Leopard, версия 10.5, выпущенной в 2007 году. Ранее существовали сторонние реализации ssh-агента с открытым исходным кодом.

Microsoft Windows

Клиентские и серверные программы на основе OpenSSH включены в Windows 10 начиная с версии 1803. Клиент SSH и агент ключей включены и доступны по умолчанию, а сервер SSH — это дополнительная функция, устанавливаемая по требованию.