Verschachtelte SSH-Befehlsweiterleitung

468
cajwine

Im Allgemeinen konnte ich in Echtzeit auf dem Remote-Computer Audio hören:

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

B. auf dem Computer mit dem Namen gateIch könnte den Befehl ausführen rec(oder sox) und der Audio-Stream wird über das Netzwerk übertragen, sodass ich ihn über den Befehl play(oder sox) in Echtzeit abspielen kann .

Das funktioniert in Ordnung, vor allem, weil ich ohne Passwort Zugriff auf das gatevon meinem Notebook habe (Verwendung authorized_keys & authorized_keys2).

Meine Topologie ist jedoch:

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

und ich muss das recin der internalComp ausführen und es stdoutsollte an den playBefehl im myComputer geleitet werden.

Also, wenn ich die Kaskadierung (Verschachtelung) sshwie folgt :

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

(beachte das -tfür ssh)

  • so wird auf das gatePasswort ohne Zugriff zugegriffen
  • auf dem gatewird der zweite ausgeführt (verschachtelt)ssh
  • so internalfragt der mich nach dem Passwort ( -t)
  • und wenn ich das Passwort internaleingebe, startet der recBefehl korrekt
  • und ich konnte den empfangenen binären Datenmüll auf meinem lokalen Terminal beobachten.

Leider funktioniert das nicht, wenn ich versuche, zum playBeispiel zu pfeifen

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

funktioniert nicht, weil die Password:Zeichenfolge umgeleitet wurde (z. B. wurde ich nicht zur Eingabe des Kennworts aufgefordert) und playverwirrt wurde.

Das Einrichten eines kennwortlosen Zugriffs zwischen me@gate-> me@internalkönnte das Problem möglicherweise lösen, aber ich möchte das nicht - ich möchte das Kennwort manuell in den internalComp eingeben .

Irgendeine Idee, wie man das löst?

2
`-t` fragt nicht nach einem Passwort ..." _Disable Pseudo-Terminal-Zuordnung._ " Attie vor 6 Jahren 0
Randbemerkung: Ich denke, Sie haben vielleicht das Wissen, um diese alte Frage zu beantworten (https://superuser.com/q/492640/432690). Kamil Maciorowski vor 6 Jahren 0

2 Antworten auf die Frage

1
Kamil Maciorowski

Ich internalgehe davon aus, dass der Standardport abhört 22.

Baue zuerst einen Tunnel:

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

Dann verbinden Sie sich durch den Tunnel. Diese Verbindung endet am internal:

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

Sie sollten internaltrotz der verwendeten Leitung nach Ihrem Kennwort gefragt werden.


ssh -L …wird in meiner Antwort auf eine andere Frage erklärt .

0
Attie

Ich gehe davon aus, dass die Passwortabfrage nicht stört, wenn Ihr Laptop internaldirekt darauf zugreifen kann.

Wenn ja, spielen Sie mit der ProxyCommandKonfigurationsoption.

Legen Sie so etwas in Ihre ~/.ssh/config

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

Dies sollte es Ihnen ermöglichen, einfach zu laufen ssh internal-via-gate, als würden Sie direkt eine Verbindung herstellen.


Wenn nicht, dann ziehen Sie die Port-Weiterleitung in Betracht:

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

Dann verbinden und authentifizieren ( ssh internal-via-gate).

Sobald Sie angemeldet sind, führen Sie Folgendes aus:

  • rec -t mp3 - | nc -l 27015 auf der Fernbedienung und
  • nc localhost 27015 | play - auf dem lokalen Rechner.