Bash: удаленная команда S SH ncat требует sigint для выхода - PullRequest
3 голосов
/ 04 марта 2020

У меня немного интересная ситуация, которую я не могу понять.

Мне нужна возможность удаленно выдавать команду через S SH, которая затем направляет результаты в туннель ncat. на оригинальный сервер.

Мои команды немного сложнее (включая innobackupex, утилиту резервного копирования MySQL), но этот минимальный пример показывает ту же проблему:

ncat -l 9970 &
ssh db-202 "echo 'testing' | ncat $BACKUPSERVER 9970"
... other commands

Проблема в том, что после команда echo завершается (или запускается), скрипт просто зависает, а последующие команды не запускаются. Мне нужно отправить Ctrl- c (SIGINT), чтобы продолжить. Очевидно, что это не идеально в контексте сценария bash, где после автоматического выполнения этой команды может потребоваться много вещей.

Не уверен, что это уместно, но отправка сигинты не всегда правильно завершите туннель ncat с обеих сторон. Иногда мне нужно убить -9, возможно, из-за того, что sigint что-то испортил.

Кто-нибудь может объяснить это поведение и как я могу обойти это? Или лучший способ сделать то, что я хочу?

Спасибо!

1 Ответ

0 голосов
/ 06 марта 2020

Наконец понял.

Я добавил аргументы --recv-only и --send-only для каждой стороны туннеля. Согласно справочной странице:

- только для отправки. Отправлять только данные, игнорируя полученные; выход на EOF

Это может объяснить это, но я думаю, что любой EOF завершит туннель. Может быть, без этих аргументов обеим сторонам нужно отправить EOF?

В любом случае, вот команды, которые работают.

ncat --recv-only -l 9970 &
ssh db-202 "echo 'testing' | ncat --send-only $BACKUPSERVER 9970"

Надеюсь, это поможет кому-то в будущем.

...