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

417
cajwine

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

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
`-t` не запрашивает пароль ..." _Disable псевдо-терминал ._ " Attie 6 лет назад 0
Примечание: я думаю, что у вас есть знания, чтобы ответить [на этот старый вопрос] (https://superuser.com/q/492640/432690). Kamil Maciorowski 6 лет назад 0

2 ответа на вопрос

1
Kamil Maciorowski

Я предполагаю, что 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 …объясняется в моем ответе на другой вопрос .

0
Attie

Я предполагаю, что запрос пароля не помешает, если ваш ноутбук сможет получить доступ 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 - на локальной машине.

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