Ich starte den Gnu-Bildschirm automatisch, wenn ich ssh in einen auf meinen eigenen Servern ssh. Wenn ich fertig bin, muss ich mich lösen. Beenden Sie dann ssh, um ssh zu beenden. Dies bedeutet, dass ich dort weitermachen kann, wo ich aufgehört habe, wenn ich irgendwann wieder auf den Server ssh.
Kann ich (zum Beispiel) einen Alias erstellen, der (innerhalb des Bildschirms) ssh löst und löscht?
Kommentare
- Wie startet man automatisch
screen
Antwort
Starten von screen
beim Anmelden am Remote-Host (auf Ihrem lokalen Computer ausgeführt):
ssh -t user@host screen
Auf dem Bildschirm Sitzung auf dem Remote-Host zum Trennen und Abmelden (wodurch die SSH-Sitzung beendet wird, wenn Sie keine dauerhafte Verbindung über einen Control Socket verwenden (dh die Einstellung ControlMaster
mit ControlPersist
in ~/.ssh/config
)):
screen -d
Später anmelden und fügen Sie erneut hinzu:
ssh -t user@host screen -r
Beachten Sie, dass Sie -t
mit erzwingt die Zuweisung von Pseudo-Terminals, um screen
auf diese Weise zu starten.
Der Alias auf dem Remote-Host wäre f oder screen -d
, vielleicht detach="screen -d"
oder ähnliches.
Auf dem lokalen Host könnten Sie einen Abschnitt in Ihrem haben ~/.ssh/config
Datei mit der Aufschrift
Host *-screen RequestTTY force RemoteCommand screen -d -R Host myhost myhost-screen HostName myhost.somedomain.example.com User myname
Wann immer Sie
ssh myhost-screen
Auf dem angegebenen Host wird eine screen
-Sitzung erstellt (oder erneut angehängt), während
ssh myhost
würde screen
nicht verwenden.
Hinweis: RemoteCommand
wurde in OpenSSH 7.6 (2017) hinzugefügt -10-03).
Für tmux
:
- Verwenden Sie
tmux new-session -A -s "%n"
in~/.ssh/config
anstelle vonscreen -d -R
. - Verwenden Sie Präfix d oder
tmux detach-client
odertmux detach
zum Trennen.
Kommentare
- Schön, danke. Zu Hause wird das super funktionieren. Ich wusste nichts über ' Pseudo-tty-Zuweisung erzwingen '. Ich habe dies getestet und es funktioniert.
Antwort
Wenn Sie Ihren Bildschirmbefehl ausführen, um Ihren Bildschirm abzurufen oder zu erstellen , Nach fügen Sie einen Kill Ihrer übergeordneten Shell hinzu, sodass Sie Ihre SSH-Verbindung beenden.
Ein Beispiel zum Beenden meines übergeordneten Prozesses, wenn der übergeordnete Prozess bash ist.
kill $( ps -ax -o pid,ppid,args | grep "^$$ " | grep bash | awk "{print $2} " )
Kommentare
- Thx. Wenn ich von einem Ort aus einchecke, an dem ich keine auszuführende App angeben kann (z. B. online ssh app.shellngn.com ) und Ihre Codezeile auf ändere Suchen Sie nach SSH-Sitzungen, dies wird funktionieren.