Leiten Sie die Dateideskriptor von der Remote-Maschine auf die lokale Maschine um

470
nautical

Angenommen, ich habe das folgende Skript auf einem Remote-Host:

$ cat remote_script #!/bin/bash  exec 3>file.log  echo "Output to stdout" echo "Output to stderr" >&2 echo "Output to fd3 >&3 

Wenn dieses Skript auf dem Remote-Computer ausgeführt wird, wird es fd3zu einer Datei auf dem Remote-Computer umgeleitet . Wenn ich eine Verbindung sshmit der Fernbedienung herstelle und das Skript ausführe

$ ssh user@remote_host "./remote_script" 

dann kann ich die Ausgabe von stdinund stderrauf dem lokalen Rechner sehen. Die Ausgabe von fd3geht jedoch immer noch in die Datei auf dem Remote-Computer.

Gibt es eine Möglichkeit, um weiterzuleiten fd3, um die Ausgabe auf dem lokalen Computer zu sehen und dennoch unterscheiden zu können stdout?

Ich habe es schon versucht

$ cat remote_script #!/bin/bash  exec 3>&1 ...  $ ssh user@remote_host "./remote_script" 3>local.file.log 

aber dies erzeugt nur eine leere Datei auf dem lokalen Rechner, also bin ich nicht in der Lage zu trennen fd3vonstdout

1
Ich kann mir keine Möglichkeit vorstellen, dies direkt zu tun. Sie können jedoch Portweiterleitung mit `ssh -L ...` durchführen (siehe `man ssh`), und dann an beiden Enden` socat` verwenden, um eine Named Pipe oder so etwas zu erstellen ... oder anstatt einen nummerierten Dateideskriptor zu verwenden machen Sie, was immer Sie gerade tun, indem Sie den Port verwenden. dirkt vor 6 Jahren 0
[* SSH: Zusätzliche "Pipe" -Fds zusätzlich zu "stdin", "stdout", "stderr" *] (https://unix.stackexchange.com/q/226638/108618) Kamil Maciorowski vor 6 Jahren 0

0 Antworten auf die Frage