嵌套的ssh命令转发


2

一般来说,我可以在远程计算机上实时监听音频:

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

例如,在名为gateI 的计算机上,我可以执行命令rec(或sox),音频流通过网络传输,因此我可以通过play(或sox)命令实时重播。

这样可以正常工作,特别是因为我无需密码访问gate我的笔记本(使用authorized_keys & authorized_keys2)。

但我的拓扑结构是:

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

我需要recinternalcomp中执行它,它stdout应该通过管道输出到计算机中的play命令my

所以,当我级联(嵌套)sshs时:

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

(注意-tssh

  • 所以,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可能可以解决问题,但我不想这样 - 我想手动输入密码到internalcomp。

不知道怎么解决这个问题?


-t没有要求密码...“ 禁用伪终端分配。
Attie

旁注:我想你可能有知识回答这个老问题
Kamil Maciorowski

Answers:


1

我假设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

我认为如果您的笔记本电脑能够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 - 在本地机器上。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.