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, exit
sollte 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
.