Все о команде Linux / Unix: sshd

SSHD (SSH Daemon) — это программа-демон для ssh (1). Вместе эти программы заменяют Rlogin а также RSH, и обеспечить безопасную зашифрованную связь между двумя ненадежными хостами по небезопасной сети. Программы предназначены для максимально простой установки и использования.

SSHD это демон, который прослушивает соединения от клиентов. Обычно он запускается при загрузке из / etc / rc. Он создает новый демон для каждого входящего соединения. Разветвленные демоны управляют обменом ключами, шифрованием, аутентификацией, выполнением команд и обменом данными. Эта реализация SSHD поддерживает оба протокола SSH версии 1 и 2 одновременно.

Протокол SSH версия 1

Каждый хост имеет специфичный для хоста ключ RSA (обычно 1024 бита), используемый для идентификации хоста. Кроме того, при запуске демона он генерирует серверный ключ RSA (обычно 768 бит). Этот ключ обычно восстанавливается каждый час, если он использовался, и никогда не сохраняется на диске.

Всякий раз, когда клиент подключается, демон отвечает своими открытыми ключами хоста и сервера. Клиент сравнивает ключ хоста RSA с собственной базой данных, чтобы убедиться, что он не изменился. Затем клиент генерирует 256-битное случайное число. Он шифрует это случайное число с использованием ключа хоста и ключа сервера и отправляет зашифрованный номер на сервер. Затем обе стороны используют это случайное число в качестве ключа сеанса, который используется для шифрования всех дальнейших сообщений в сеансе. Остальная часть сеанса шифруется с использованием обычного шифра, в настоящее время Blowfish или 3DES, причем 3DES используется по умолчанию. Клиент выбирает используемый алгоритм шифрования из предложенных сервером.

Затем сервер и клиент входят в диалог аутентификации. Клиент пытается аутентифицировать себя с использованием аутентификации .rhosts, аутентификации .rhosts в сочетании с аутентификацией хоста RSA, аутентификацией запроса-ответа RSA или аутентификацией на основе пароля.

Аутентификация Rhosts обычно отключается, потому что она принципиально небезопасна, но при желании ее можно включить в файле конфигурации сервера. Безопасность системы не улучшается, если rshdrlogind и rexecd отключены (таким образом, полностью отключив rlogin и rsh на машине).

Протокол SSH версия 2

Версия 2 работает аналогично: каждый хост имеет специфичный для хоста ключ (RSA или DSA), используемый для идентификации хоста. Однако при запуске демона он не генерирует ключ сервера. Прямая защита обеспечивается соглашением о ключах Диффи-Хеллмана. Это ключевое соглашение приводит к общему сеансовому ключу.

Остальная часть сеанса шифруется с использованием симметричного шифра, в настоящее время 128-битного AES, Blowfish, 3DES, CAST128, Arcfour, 192-битного AES или 256-битного AES. Клиент выбирает используемый алгоритм шифрования из предложенных сервером. Кроме того, целостность сеанса обеспечивается посредством кода аутентификации криптографического сообщения (hmac-sha1 или hmac-md5).

Протокол версии 2 предоставляет метод аутентификации пользователя на основе открытого ключа (PubkeyAuthentication) или хоста клиента (HostbasedAuthentication), обычную аутентификацию по паролю и методы на основе запроса-ответа.

Выполнение команд и пересылка данных

Если клиент успешно аутентифицирует себя, вводится диалог для подготовки сеанса. В это время клиент может запросить такие вещи, как выделение псевдотерминала, пересылка соединений X11, пересылка соединений TCP / IP или переадресация соединения агента аутентификации по безопасному каналу.

Наконец, клиент либо запрашивает оболочку, либо выполняет команду. Затем стороны переходят в режим сеанса. В этом режиме любая сторона может отправлять данные в любое время, и такие данные пересылаются в / из оболочки или команды на стороне сервера, а также в пользовательский терминал на стороне клиента.

Когда пользовательская программа завершает работу и все перенаправленные X11 и другие соединения закрываются, сервер отправляет клиенту статус завершения команды, и обе стороны завершают работу.

SSHD можно настроить с помощью параметров командной строки или файла конфигурации. Параметры командной строки переопределяют значения, указанные в файле конфигурации.

SSHD перечитывает свой файл конфигурации, когда получает сигнал зависания, SIGHUP выполнив себя с именем, он был запущен как, т.е. / usr / sbin / sshd.

Возможны следующие варианты:

-б биты

Определяет количество бит в ключе сервера эфемерного протокола версии 1 (по умолчанию 768).

-d

Режим отладки. Сервер отправляет подробный отладочный вывод в системный журнал и не помещает себя в фоновый режим. Сервер также не будет работать и будет обрабатывать только одно соединение. Эта опция предназначена только для отладки на сервере. Несколько опций -d повышают уровень отладки. Максимум 3.

Когда указана эта опция, SSHD отправит вывод со стандартной ошибкой вместо системного журнала.

-е конфигурационный файл

Определяет имя файла конфигурации. По умолчанию это / etc / ssh / sshd_config SSHD отказывается запускаться, если нет файла конфигурации.

-грамм login_grace_time

Предоставляет льготное время для аутентификации клиентов (по умолчанию 120 секунд). Если клиенту не удается аутентифицировать пользователя в течение этих нескольких секунд, сервер отключается и завершает работу. Нулевое значение указывает на отсутствие ограничений.

-час host_key_file

Указывает файл, из которого читается ключ хоста. Эта опция должна быть указана, если SSHD не запускается от имени пользователя root (поскольку обычные файлы ключей хоста обычно не читаются никем, кроме root). Значение по умолчанию: / etc / ssh / ssh_host_key для протокола версии 1 и / etc / ssh / ssh_host_rsa_key и / etc / ssh / ssh_host_dsa_key для протокола версии 2. Можно использовать несколько файлов ключей хоста для разных версий протокола и ключа хоста. алгоритмы.

Указывает, что SSHD запускается из inetd. SSHD обычно не запускается из inetd, потому что ему нужно сгенерировать ключ сервера, прежде чем он сможет ответить клиенту, а это может занять десятки секунд. Клиенты должны будут ждать слишком долго, если ключ будет обновляться каждый раз. Однако при малых размерах клавиш (например, 512), используя SSHD из inetd может быть осуществимым.

-К key_gen_time

Указывает, как часто регенерируется серверный ключ эфемерного протокола версии 1 (по умолчанию 3600 секунд или один час). Мотивация для регенерации ключа довольно часто заключается в том, что ключ нигде не сохраняется, и примерно через час становится невозможным восстановить ключ для расшифровки перехваченных сообщений, даже если машина взломана или физически захвачена. Нулевое значение указывает, что ключ никогда не будет восстановлен.

-о вариант

Может использоваться для задания параметров в формате, используемом в файле конфигурации. Это полезно для указания параметров, для которых нет отдельного флага командной строки.

-п порт

Указывает порт, на котором сервер прослушивает соединения (по умолчанию 22). Допускается использование нескольких портов. Порты, указанные в файле конфигурации, игнорируются, если указан порт командной строки.

-Q

Тихий режим. Ничего не отправляется в системный журнал. Обычно начало, аутентификация и завершение каждого соединения регистрируются.

-T

Тестовый режим. Только проверяйте правильность файла конфигурации и работоспособность ключей. Это полезно для обновления SSHD надежно, поскольку параметры конфигурации могут измениться.

-U Len

Эта опция используется для указания размера поля в utmp структура, которая содержит имя удаленного хоста. Если разрешенное имя хоста длиннее len, вместо него будет использоваться десятичное значение с точками. Это позволяет узлам с очень длинными именами, которые выходят за пределы этого поля, по-прежнему идентифицироваться однозначно. Указание —u0 указывает, что в файл utmp следует помещать только десятичные адреса с точками. —u0 также может быть использован для предотвращения SSHD от выполнения DNS-запросов, если механизм аутентификации или конфигурация не требуют этого. Механизмы аутентификации, которые могут требовать DNS, включают RhostsAuthenticationRhostsRSAAuthentication HostbasedAuthentication и используя из = модельного списка опция в ключевом файле. Параметры конфигурации, для которых требуется DNS, включают использование шаблона USER @ HOST в AllowUsers или же DenyUsers.

-D

Когда указана эта опция SSHD не отсоединится и не станет демоном. Это позволяет легко контролировать SSHD.

-4

сил SSHD использовать только адреса IPv4.

-6

сил SSHD использовать только адреса IPv6.

Конфигурационный файл

SSHD читает данные конфигурации из / etc / ssh / sshd_config (или файла, указанного с помощью —е в командной строке). Формат файла и параметры конфигурации описаны в sshd_config5.

Процесс входа

Когда пользователь успешно входит в систему, SSHD делает следующее:

  1. Если для входа используется tty, а команда не указана, печатается время последнего входа в систему и / etc / motd (если это не запрещено в файле конфигурации или с помощью $ HOME / .hushlogin, см. Раздел Sx FILES).
  2. Если логин на tty, записывает время входа.
  3. Проверяет / etc / nologin, если он существует, печатает содержимое и завершает работу (если не root).
  4. Изменения для запуска с правами обычного пользователя.
  5. Устанавливает основную среду.
  6. Читает $ HOME / .ssh / environment, если он существует, и пользователям разрешено изменять свою среду. Увидеть PermitUserEnvironment опция в sshd_config5.
  7. Изменения в домашнем каталоге пользователя.
  8. Если $ HOME / .ssh / rc существует, запускает его; иначе, если / etc / ssh / sshrc существует, запускает его; в противном случае работает Xauth. Файлы « rc » получают протокол аутентификации X11 и cookie при стандартном вводе.
  9. Запускает пользовательскую оболочку или команду.

Формат файла Authorized_Keys

$ HOME / .ssh / authorized_keys — это файл по умолчанию, в котором перечислены открытые ключи, которые разрешены для аутентификации RSA в версии протокола 1 и для аутентификации с открытым ключом (PubkeyAuthentication) в версии протокола 2. AuthorizedKeysFile может использоваться для указания альтернативного файла.

Каждая строка файла содержит один ключ (пустые строки и строки, начинающиеся с «#», игнорируются как комментарии). Каждый открытый ключ RSA состоит из следующих полей, разделенных пробелами: параметры, биты, экспонента, модуль, комментарий. Каждый открытый ключ протокола версии 2 состоит из: параметров, типа ключа, ключа в кодировке base64, комментария. Поле параметров является необязательным; его присутствие определяется тем, начинается ли строка с цифры или нет (поле опций никогда не начинается с цифры). Поля биты, экспонента, модуль и комментарий дают ключ RSA для версии протокола 1; поле комментария ни для чего не используется (но может быть удобным для пользователя, чтобы идентифицировать ключ). Для протокола версии 2 тип ключа — «ssh-dss» или «ssh-rsa».

Строки в этом файле обычно имеют длину несколько сотен байтов (из-за размера кодировки открытого ключа). Вы не хотите вводить их; вместо этого скопируйте файл identity.pub id_dsa.pub или файл id_rsa.pub и отредактируйте его.

SSHD обеспечивает минимальный размер модуля ключа RSA для ключей протокола 1 и протокола 2 в 768 бит.

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

из = модельного списка

Указывает, что в дополнение к аутентификации с открытым ключом каноническое имя удаленного хоста должно присутствовать в списке шаблонов, разделенных запятыми («*» и «?» Служат подстановочными знаками). В списке также могут содержаться шаблоны, которые пресекаются с префиксом «!»; если каноническое имя хоста соответствует отрицательному шаблону, ключ не принимается. Целью этой опции является необязательное повышение безопасности: аутентификация с открытым ключом сама по себе не доверяет сети или серверам имен или чему-либо (кроме ключа); однако, если кто-то как-то украл ключ, ключ позволяет злоумышленнику войти в систему из любой точки мира. Эта дополнительная опция делает использование украденного ключа более сложным (серверы имен и / или маршрутизаторы должны быть скомпрометированы в дополнение только к ключу).

Команда = команда

Указывает, что команда выполняется всякий раз, когда этот ключ используется для аутентификации. Команда, предоставленная пользователем (если есть), игнорируется. Команда запускается на pty, если клиент запрашивает pty; в противном случае он запускается без tty. Если требуется 8-битный чистый канал, нельзя запрашивать pty или указывать нет-псевдотерминал Цитата может быть включена в команду, заключив ее в обратный слеш. Эта опция может быть полезна для ограничения определенных открытых ключей для выполнения только определенной операции. Примером может служить ключ, который разрешает удаленное резервное копирование, но не более того. Обратите внимание, что клиент может указать переадресацию TCP / IP и / или X11, если они явно не запрещены. Обратите внимание, что этот параметр применяется к выполнению оболочки, команды или подсистемы.

среда = ИМЯ = значение

Указывает, что строка должна быть добавлена ​​в среду при входе в систему с использованием этого ключа. Переменные среды, установленные таким образом, будут переопределять другие значения среды по умолчанию. Допускается несколько вариантов этого типа. Обработка среды по умолчанию отключена и управляется через PermitUserEnvironment вариант. Эта опция автоматически отключается, если UseLogin включен.

нет-переадресации портов

Запрещает пересылку TCP / IP, когда этот ключ используется для аутентификации. Любые запросы клиента на переадресацию порта будут возвращать ошибку. Это может быть использовано, например, в связи с команда вариант.

нет-X11-экспедиторская

Запрещает пересылку X11, когда этот ключ используется для аутентификации. Любые запросы клиента на пересылку X11 будут возвращать ошибку.

нет-агент переадресации

Запрещает переадресацию агента аутентификации, когда этот ключ используется для аутентификации.

нет-псевдотерминал

Предотвращает распределение tty (запрос на выделение pty не будет выполнен).

permitopen = хост: порт

Предел местный «SSH-L«Переадресация портов, так что он может подключаться только к указанному хосту и порту. Адреса IPv6 могут быть указаны с альтернативным синтаксисом: хост / порт Несколько permitopen параметры могут быть применены через запятую. Для указанных имен хостов сопоставление с образцом не выполняется, они должны быть буквальными доменами или адресами.

Примеры

1024 33 12121 … 312314325 ylo@foo.bar

from = «*. niksula.hut.fi,! pc.niksula.hut.fi» 1024 35 23 … 2334 ylo @ niksula

command = «dump / home», no-pty, no-port-forwarding 1024 33 23 … 2323 backup.hut.fi

allowopen = «10.2.1.55:80», allowopen = «10.2.1.56:25» 1024 33 23 … 2323

Формат файла Ssh_Known_Hosts

Файлы / etc / ssh / ssh_known_hosts и $ HOME / .ssh / known_hosts содержат открытые ключи хостов для всех известных хостов. Глобальный файл должен быть подготовлен администратором (необязательно), а файл для каждого пользователя поддерживается автоматически: каждый раз, когда пользователь подключается с неизвестного хоста, его ключ добавляется в файл для каждого пользователя.

Каждая строка в этих файлах содержит следующие поля: имена хостов, биты, экспонента, модуль, комментарий. Поля разделены пробелами.

Имена хостов — это список шаблонов, разделенных запятыми («*» и «?» Действуют как символы подстановки); каждый шаблон, в свою очередь, сопоставляется с каноническим именем хоста (при аутентификации клиента) или с предоставленным пользователем именем (при аутентификации сервера). Шаблону также может предшествовать ‘!’ для обозначения отрицания: если имя хоста соответствует отрицательному шаблону, оно не принимается (этой строкой), даже если оно соответствует другому шаблону в строке.

Биты, экспонента и модуль берутся непосредственно из ключа хоста RSA; они могут быть получены, например, из /etc/ssh/ssh_host_key.pub. Необязательное поле комментария продолжается до конца строки и не используется.

Строки, начинающиеся с «#» и пустые строки, игнорируются как комментарии.

При выполнении аутентификации хоста аутентификация принимается, если какая-либо подходящая строка имеет правильный ключ. Таким образом, допустимо (но не рекомендуется) иметь несколько строк или разные ключи хоста для одних и тех же имен. Это неизбежно произойдет, когда в файл будут помещены короткие формы имен хостов из разных доменов. Возможно, файлы содержат противоречивую информацию; Аутентификация принимается, если из любого файла можно найти достоверную информацию.

Строки в этих файлах обычно состоят из сотен символов, и вы определенно не хотите вводить ключи хоста вручную. Скорее, сгенерируйте их с помощью скрипта или взяв /etc/ssh/ssh_host_key.pub и добавив имена хостов впереди.

Примеры

closenet, ..., 130.233.208.41 1024 37 159 ... 93 closenet.hut.fi
cvs.openbsd.org, 199.185.137.3 ssh-rsa AAAA1234 ..... =

Смотрите также

scp (1), sftp (1), ssh (1), ssh-add1, ssh-agent1, ssh-keygen1, login.conf5, модули (5), sshd_config5, sftp-server8

Т. Илонен, Т. Кивинен, М. Сааринен, Т. Ринне, С. Лехтинен, «Архитектура протокола SSH» draft-ietf-secsh-Architecture-12.txt Январь 2002 г. незавершенный материал

М. Фридл Н. Провос В. А. Симпсон «Групповой обмен Диффи-Хеллмана для протокола транспортного уровня SSH» draft-ietf-secsh-dh-group-exchange-02.txt Январь 2002 г. незавершенный материал

Используйте команду man (% man), чтобы увидеть, как команда используется на вашем компьютере.

Ссылка на основную публикацию