Почему ssh.service не запускается автоматически во время загрузки, несмотря на то, что он включен systemd?

/dev/tcp/host/portвсегда будет открыт для чтения -для записи, независимо от того, используете ли вы <, >или<>>&или &>вbash).

>& /dev/tcp/host/portподключится к host:portи перенаправит на него как stdout, так и stderr.

Хак /dev/tcpиспользует socket(2)и connect(2)за кулисами, и нет очевидного и последовательного способа использовать сокет tcp, как если бы это был файловый дескриптор, открытый только для чтения или записи.

И файловый дескриптор, просто имеющий номер 1 и называющий себя stdout, не означает, что он не открыт для ввода:cat <&1также работает в терминале.

The redirection works both if n is specified or not, but (1) doesn't take an n argument, implying that (1) is not used?

Не здесь.

true 3>&/dev/tcp/127.0.0.1/9999
bash: /dev/tcp/127.0.0.1/9999: ambiguous redirect
0
29.10.2021, 22:28
2 ответа

Может ли это быть той же проблемой, что и у задавшего вопрос #442181 ? т.е. sshd не запускается при загрузке, потому что интерфейс/адрес, к которому он хочет привязаться, еще не готов. Вы упомянули, что указали нестандартный порт -для сокета сервера, указали ли вы также конкретный сетевой интерфейс и/или IP-адрес?

Я не знаю, почему вместо этого systemd запускает демон соединения -для каждого соединения, который использует стандартная конфигурация, однако. Как вы предполагаете, это может быть частью конфигурации системы по умолчанию. В вопросе #507705 они говорят об «активации сокета» systemd, которая, по-видимому, является функцией, которая обеспечивает порождение службы соединения -. Найдите файл модуля systemd с именем ssh.socket. Вы можете использовать man systemd.socket, чтобы получить информацию о том, как работает эта функция.

Изменить :Вы должны иметь возможность использовать systemctl status ssh.socket, чтобы проверить, включен ли сокет сервера SSH systemd.

0
31.10.2021, 19:36

Если вы запустите sshd вручную, systemd не зарегистрирует его как запущенный, поэтому понятно, что systemctl ничего не показывает. Каждый sshd на самом деле является процессом прослушивания, и после того, как соединение установлено, разветвляется отдельный процесс, работающий с этим соединением. Если вы psэто отразит несколько процессов sshd. Если вы убьете прослушиватель sshd -, другие процессы sshd, обрабатывающие соединения, останутся в живых.

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

Надеюсь, это поможет

0
30.10.2021, 18:36

Теги

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