Переадресация вложенных команд 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 -
на локальной машине.