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

В недавней версии Upstart появились новые необычные системные функции запуска заданий при входящем соединении через сокет-мост. Я хотел бы запустить мой 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? Если это так, то это все портит веселье: /

3
задан 18 January 2012 в 11:28

2 ответа

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

Из man socket-event:

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

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

0
ответ дан 18 January 2012 в 11:28

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

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

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

Другие вопросы по тегам:

Похожие вопросы: