Использование tcl/expect для подготовки туннеля

В рамках более крупного плана (перепрыгнуть через кучу переходов, а затем создать порт-туннель для mongodb в настройке, в которой PortForwarding отключен), я попытался создать сценарий tcl/expect, чтобы проверить, можно ли ретранслировать подготовленный поток. по tcl/ожидать.

Вот мой эксперимент:

# terminal 1 [listen to 2000]
nc -l 2000

# terminal 2 [listen to 200 then connect it to 2000 using expect]
socat tcp-l:200 system:'./nc-test.exp'

# terminal 3 [connect to 200]
nc localhost 200

и мой простой скрипт tcl/expect (nc-test.exp):

#!/usr/local/bin/expect

log_user 0
spawn nc localhost 2000
stty raw -echo
interact -o -nobuffer

Теперь проблема в том, что все, что я пишу terminal 3, возвращается ко мне самому. Как ни странно, этого не происходит, когда я подключаюсь socat напрямую к nc localhost 2000 или когда я напрямую запускаю скрипт tcl/expect. Не могли бы вы помочь мне понять

  • Что вызывает нежелательное эхо?
  • Осуществим ли мой более масштабный план? (Моя главная забота - сохранить поток необработанным)
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
186
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Команда stty в сценарии expect воздействует на /dev/tty, который, вероятно, является tty в терминале 2. Однако spawn создает еще один pty для взаимодействия с запускаемой им командой. Этот tty будет унаследован от текущего tty, то есть терминала 2, поэтому эхо будет включено. Может быть достаточно просто переместить строку stty raw -echo перед спауном, или, более явно, вы можете установить параметр stty, который будет использоваться spawn с помощью такой команды, как

set stty_init "raw -echo"

перед spawn.

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