ssh ncat сохраняет процесс ncat, бегущий за разъединением; как я предотвращаю это?

Если я выполняю команду

$ ssh othermachine ncat localhost 10000

это открывается ssh сессия к "othermachine" и каналам это в ncat процесс. (Существует что-то еще слушающее на "othermachine" порте 10000).

Теперь, если я разъединяюсь ssh сессия (с Ctrl+C) ncat процесс на "othermachine" продолжает бежать. Как я предотвращаю это? Я хочу ncat умереть если его родитель ssh выходы.

3
12.12.2013, 14:47
4 ответа

Технически, когда Вы ssh к "othermachine" Вы являетесь удаленно рабочими ncat localhost 10000 на "othermachine". Нет никакой передачи по каналу, продолжающейся здесь.

Относительно чего-то еще "слушание", которому я не верю, существует что-либо. Скорее Вы работаете ncat localhost 10000 при попытке соединиться с чем-то, это слушает на порте 10000 и там нет ничего.

Пример

$ ncat localhost 10000
Ncat: Connection refused.

Если Вы говорите ncat для слушания затем, это останется открытым.

$ ncat localhost -l 10000

При помещении этого вместе работает команда, как, с добавлением -l переключатель.

$ ssh othermachine ncat localhost -l 10000

ncat продолжает работать?

После выполнения Ctrl+C ncat localhost -l 10000 также продолжает работать на удаленном сервере для меня также.

Для остановки этого поведения, Вы могли перенести вызов к "othermachine" в оболочке, такой как sh.

Пример

$ ssh othermachine -t 'sh -c "ncat localhost -l 10000"'
...stays up...

Теперь в другой оболочке, если я вхожу в "othermachine" и подтверждаю, что это работает:

$ pgrep -l ncat
8479 ncat

Если я Ctrl+C оригинал ssh соединение ncat остановки, работающие также.

$ ssh othermachine -t 'sh -c "ncat localhost -l 10000"'
Ctrl + C
Shared connection to othermachine closed.

Подтверждение это пошло:

$ pgrep -l ncat
$

Почему это работает?

Основная часть в этой установке -t переключатель. Это вынуждает соединение установить pseudo-tty (ptty) терминал как часть соединения.

выборка из ssh страницы справочника

 -t     Force pseudo-tty allocation.  This can be used to execute arbitrary
        screen-based programs on a remote machine, which can be very useful,
        e.g. when implementing menu services.  Multiple -t options force tty 
        allocation, even if ssh has no local tty.

Этот ptty позволяет нам отправлять Ctrl+C до ncat который затем завершается, приводя к закрытию ssh соединение полностью.

Ссылки

4
27.01.2020, 21:16
  • 1
    "Чем-то еще слушание" я подразумеваю, что существует другая программа, уже работающая 'othermachine' и слушающая на порте 10000, таким образом, этот ответ не релевантен. –  JanKanis 30.01.2014, 22:24

Бросание беглого взгляда на man ssh

If command is specified, it is executed on the remote host instead of a login shell.

Это могло быть причиной, почему она продолжает бегать за a SIGTERM/SIGKILL. Если Вы захотите вызвать вход в систему оболочки, то необходимо будет сделать что-то как:

ssh othermachine -t 'bash -l -c "ncat localhost 10000"'
1
27.01.2020, 21:16
  • 1
    я сделал быстрый тест с iperf (ssh othermachine -t 'bash -l -c "iperf -s "') и это работало. Не звоня явно колотят, это будет продолжать управлять ;) –   12.12.2013, 14:54

работы ответа nwildner, но единственная вещь, я волнуюсь по поводу этого, являются переключателем-t, присваивает pseudo-tty, и это могло, возможно, привести к терминальным escape-последовательностям, не проходящим чисто? В случае передачи с ncat, лучшее решение для моего случая состоит в том, чтобы использовать

ssh othermachine -W localhost:10000

который является собственным способом ssh передать соединение.

0
27.01.2020, 21:16
  • 1
    , я действительно предпочитаю удаленное выполнение хоста, вместо этого вызывая оболочку входа в систему также ;) –   12.12.2013, 17:38

Другой ответ на этот вопрос должен использовать nc вместо ncat. Это обычно имеет ту же функциональность. Если stdin ncat закрывается, ncat не закрывает свой конец соединения TCP, в то время как nc делает.

0
27.01.2020, 21:16

Теги

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