Команда Linux/Unix: sshd

sshd (демон SSH) – это программа-демон для 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

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

-b бит

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

-d

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

-e

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

-f файл_конфигурации

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

-g login_grace_time

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

-h 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. Можно использовать несколько файлов ключей хоста для разных версий протокола и ключа хоста. алгоритмы.

-i

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

-k key_gen_time

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

-o опция

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

-p Порт

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

-q

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

-t

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

-u Len

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

-D

Если указан этот параметр, sshd не будет отключаться и не станет демоном. Это позволяет легко отслеживать sshd

-4

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

-6

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

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

sshd считывает данные конфигурации из/etc/ssh/sshd_config (или файла, указанного в командной строке – f ). Формат файла и параметры конфигурации описаны в 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 или указывать no-pty . В команду можно включить кавычку, заключив ее в обратную косую черту. Эта опция может быть полезна для ограничения определенных открытых ключей для выполнения только определенной операции. Примером может служить ключ, который разрешает удаленное резервное копирование, но не более того. Обратите внимание, что клиент может указать переадресацию TCP/IP и/или X11, если они явно не запрещены. Обратите внимание, что этот параметр применяется к выполнению оболочки, команды или подсистемы.

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

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

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

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

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

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

нет агента пересылка

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

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

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

permitopen = хост: порт

Ограничьте локальную “ ssh -L ” переадресацию портов так, чтобы она могла подключаться только к указанному хосту и порту. Адреса IPv6 могут быть указаны с альтернативным синтаксисом: хост/порт Можно применить несколько параметров allowopen , разделенных запятыми. Для указанных имен хостов сопоставление с образцом не выполняется, они должны быть буквальными доменами или адресами.

Примеры

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-architect-12.txt Январь 2002 г. незавершенный материал

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

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

Оцените статью
Solutics.ru
Добавить комментарий