запуск sshd при первом подключении к порту 22 с новым сокет-мостом upstart

запуск sshd при первом подключении к порту 22 с новым сокет-мостом upstart

В недавнем Upstart появились эти новые модные systemd-подобные функции запуска заданий при входящем подключении через socket-bridge. Я бы хотел запустить sshd при первом подключении к порту 22.

Теперь у меня start on socket PROTO=inet PORT=22в ssh.conf есть: и запущены задания upstart-socket-bridge и upstart-udev-bridge.

Задание ssh запускается нормально, когда я подключаюсь к своему ящику через порт 22, но sshd не отвечает мне. Как будто он не получает его и не может принять. Повторная попытка подключения не поможет, даже sshd теперь работает и должен принимать соединения нормально. Upstart все еще возится с ним!

Страницы руководства по событиям сокетовсказать:

При обнаружении входящего соединения дескриптор файла, представляющий сокет, передается заданию, чтобы разрешить ему принять(2) соединение. Кроме того, переменная окружения UPSTART_JOB будет содержать имя события («сокет»), а переменная окружения UPSTART_FDS будет содержать номер дескриптора файла, соответствующего прослушиваемому сокету.

Означает ли это, что для использования этого преимущества ssh нужна особая поддержка передачи сокета FD? Если это так, то это портит все удовольствие :/

решение1

Для использования моста сокетов требуется пропатченный демон, который может обрабатывать предоставленный ему сокет.

От man socket-event:

При обнаружении входящего соединения дескриптор файла, представляющий сокет, передается заданию, чтобы разрешить ему принять(2) соединение. Кроме того, переменная окружения UPSTART_JOB будет содержать имя события («сокет»), а переменная окружения UPSTART_FDS будет содержать номер дескриптора файла, соответствующего прослушиваемому сокету.

В то время как обычно sshd просто создает сокет и запускает для него listen(), а затем accept(), sshd нужно просто прочитать переменную среды UPSTART_FDS и принять ее.

решение2

Я настоятельно рекомендую запускать sshd как обычную службу, а не запускать ее по требованию. sshd вполне способен управлять соединениями самостоятельно во всех случаях, кроме самых крайних.

Если вам абсолютно необходимо запустить sshd по требованию, для устранения неполадок будут полезны следующие команды:

  • ps auxw | grep ssh, grep для ssh в списке запущенных процессов.
  • netstat -tlp, выводит список портов TCP, которые в данный момент прослушивает служба. Здесь должен быть указан SSH, если нет, sshd настроен неправильно.
  • ssh -vvv(запускается с клиента), подробный отладочный вывод вашего сеанса SSH помогает точно определить точку сбоя.
  • nmap <hostname>(запуск с клиента — требуется установка пакета nmap), список открытых портов на хосте. Если SSH не указан здесь, но указан в netstatвыводе, у вас, вероятно, проблема с брандмауэром.

Связанный контент