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