Переадресация вложенных команд ssh

В общем, я мог слушать в реальном времени аудио на удаленном компьютере как:

ssh me@gate rec -t mp3 - | play -

например на компьютере с именем gate Я мог выполнить команду rec (или же sox) и аудиопоток передается по сети, поэтому я могу воспроизводить его в режиме реального времени через play (или же sox) команда.

Это работает нормально, особенно потому, что у меня есть доступ без пароля к gate из моей записной книжки (используя authorized_keys & authorized_keys2).

Но моя топология:

+----+  internet   +------+  lan   +----------+
| my | ----------> | gate | -----> | internal |
+----+             +------+        +----------+

и мне нужно выполнить rec в internal комп и это stdout должно быть передано play команда в my компьютер.

Итак, когда я каскадно sshэто как:

ssh -t me@gate ssh me@internal rec -t mp3 -

(Обратите внимание -t за ssh)

  • Итак gate доступ без пароля
  • на gate выполняется второй (вложенный) ssh
  • Итак internal спрашивает у меня пароль (-t)
  • и когда я ввожу пароль, internal правильно запускает rec команда
  • и я мог наблюдать полученный бинарный мусор на моем локальном терминале.

К сожалению, это не работает, когда я пытаюсь playНапример, это

ssh -t me@gate ssh me@internal rec -t mp3 - | play -

не работает, потому что Password: строка была перенаправлена ​​(например, я не запрашивал пароль), и play запутался.

Настройка доступа без пароля между me@gate -> me@internal Вероятно, может решить проблему, но я не хочу этого - я хочу вручную ввести пароль для internal сост.

Есть идеи, как это решить?

2 ответа

Я предполагаю internal слушает по стандарту 22 порт.

Сначала постройте туннель:

ssh -N -L localhost:2222:internal:22 me@gate
# you can put it to background with &

Затем подключитесь через туннель. Это соединение закончится в internal:

ssh -p 2222 me@localhost rec -t mp3 - | play -

Вы должны спросить ваш пароль для internal несмотря на трубу используется.


ssh -L … объясняется в моем ответе на другой вопрос.

Я предполагаю, что запрос пароля не будет мешать, если ваш ноутбук может получить доступ internal напрямую?

Если так, поиграйте с ProxyCommand Вариант конфигурации.

Положите что-то вроде этого в свой ~/.ssh/config

Host internal-via-gate
    User me
    Hostname internal
    Port 22
    ProxyCommand ssh gate nc %h %p

Это должно позволить вам просто запустить ssh internal-via-gate, как если бы вы подключались напрямую.


Если нет, то, возможно, рассмотрим переадресацию портов:

Host internal-via-gate
    User me
    Hostname internal
    Port 22
    ProxyCommand ssh gate nc %h %p
    LocalForward 27015 localhost:27015

Затем подключитесь и авторизуйтесь (ssh internal-via-gate).

После того, как вы вошли в систему, запустите:

  • rec -t mp3 - | nc -l 27015 на пульте и
  • nc localhost 27015 | play - на локальной машине.
Другие вопросы по тегам