Ausführen einer interaktiven Shell aus einem Bash-Skript

Ausführen einer interaktiven Shell aus einem Bash-Skript

Ich schreibe gerade ein Bash-Skript, das einen SSH-Tunnel erstellt. Sobald dies erledigt ist, möchte ich, dass das Skript eine neue lokale (!) interaktive Shell öffnet, damit ich bei geöffnetem SSH-Tunnel an meinem System arbeiten kann.

Sobald ich eingebe, exitsollte die lokale Shell geschlossen werden und das ursprüngliche Skript weiter ausgeführt werden.

Mein aktueller Ansatz sieht im Wesentlichen so aus:

#!/usr/bin/env bash

set -e

ssh -N user@ip -L xxx:xxx &
SSH_CONNECTION=${!}

trap "kill ${SSH_CONNECTION}" ERR

sleep 3
bash -i

kill ${SSH_CONNECTION}

Bisher funktioniert alles - außer das Ausführen der lokalen Shell. Ich bekomme tatsächlich eine Shell und kann sogar etwas darin eingeben, aber wenn ich drücke, passiert nichts <Return>.

Irgendeine Idee, was ich falsch mache?

Antwort1

Sie müssen verwenden -f, damit die Verbindung in den Hintergrund geht, sobald sie hergestellt ist. Dann brauchen Sie Folgendes nicht &:

ssh -Nf  -L xxx:xxx user@ip

und die Verarbeitung sollte in Ihr erfolgen bash.

verwandte Informationen