Encaminhamento de comando ssh aninhado

2

Em geral, posso ouvir áudio em tempo real no computador remoto como:

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

por exemplo. no computador chamado gate eu poderia executar o comando rec (ou sox ) e o fluxo de áudio é transferido pela rede, para que eu pudesse reproduzi-lo em tempo real por meio do play (ou sox ) comando.

Isso funciona bem, especialmente porque eu tenho acesso sem senha ao gate do meu bloco de anotações (usando authorized_keys & authorized_keys2 ).

Mas minha topologia é:

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

e preciso executar o rec no internal comp e o stdout deve ser canalizado para o comando play no my computer.

Então, quando coloco em cascata (aninhamento) o ssh s como:

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

(observe o -t para ssh )

  • então, o gate é acessado sem senha
  • no gate é executado o segundo (aninhado) ssh
  • , então o internal me pergunta a senha ( -t )
  • e quando eu insiro a senha, o internal inicia corretamente o comando rec
  • e eu pude assistir ao lixo de dados binários recebido no meu terminal local.

Infelizmente, isso não funciona quando tento canalizar para o play , por exemplo isso

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

não funciona, porque a string Password: foi redirecionada (por exemplo, não solicitei a senha) e o play ficou confuso.

Configuração de acesso sem senha entre o me@gate - > me@internal provavelmente poderia resolver o problema, mas eu não quero isso - eu quero inserir manualmente a senha para o internal comp.

Alguma ideia de como resolver isso?

    
por cajwine 19.01.2018 / 15:11

2 respostas

1

Eu assumo que internal ouve na porta padrão 22 .

Primeiro, construa um túnel:

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

Em seguida, conecte-se pelo túnel. Esta conexão terminará em internal :

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

Você deve ser solicitado a fornecer sua senha para internal , apesar do pipe ser usado.

ssh -L … é explicado em minha resposta a outra pergunta .

    
por 19.01.2018 / 15:24
0

Presumo que o prompt de senha não atrapalhe se o seu laptop consegue acessar internal diretamente?

Se sim, tenha uma jogada com a opção de configuração ProxyCommand .

Coloque algo assim em seu ~/.ssh/config

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

Isso deve permitir que você simplesmente execute ssh internal-via-gate , como se estivesse se conectando diretamente.

Se não, então talvez considere o encaminhamento de porta:

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

Em seguida, conecte e autentique ( ssh internal-via-gate ).

Quando você estiver logado, execute:

  • rec -t mp3 - | nc -l 27015 no controle remoto e
  • nc localhost 27015 | play - na máquina local.
por 19.01.2018 / 15:30