Encaminhamento de comando ssh aninhado


2

Em geral, eu podia ouvir em tempo real o áudio no computador remoto como:

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

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

Isso funciona bem, especialmente porque eu tenho acesso sem senha ao gatedo meu notebook (usando authorized_keys & authorized_keys2).

Mas minha topologia é:

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

e eu preciso executar o recno internalcomp e stdoutdeve ser canalizado para o playcomando no mycomputador.

Então, quando estou em cascata (aninhando), sshs como:

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

(note o -tpara ssh)

  • portanto, o gateé acessado sem senha
  • no gateé executado o segundo (aninhado)ssh
  • então o internalme pede a senha ( -t)
  • e quando digito a senha, internalo reccomando inicia corretamente
  • e eu pude assistir ao lixo de dados binários recebido no meu terminal local.

Infelizmente, isso não funciona quando estou tentando canalizar para play, por exemplo, este

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

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

A configuração do acesso sem senha entre me@gate-> me@internalprovavelmente pode resolver o problema, mas não quero isso - quero inserir manualmente a senha na internalcomp.

Alguma idéia de como resolver isso?


-tnão pede uma senha ... " Desativar alocação de pseudo-terminal " .
Attie

Nota lateral: acho que você pode ter o conhecimento necessário para responder a essa pergunta antiga .
Kamil Maciorowski

Respostas:


1

Presumo que internalouça na 22porta padrão .

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 através do túnel. Esta conexão terminará em internal:

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

Você deve solicitar sua senha, internalapesar do tubo estar sendo usado.


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


0

Presumo que o prompt de senha não atrapalhe se o seu laptop puder acessar internaldiretamente?

Nesse caso, brinque com a ProxyCommandopção de configuração.

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.


Caso contrário, 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).

Depois de fazer login, execute:

  • rec -t mp3 - | nc -l 27015 no controle remoto e
  • nc localhost 27015 | play - na máquina local.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.