Ich möchte screen verwenden, um SSH-Sitzungen auf meinem Server aufrecht zu erhalten. Es wäre schön, wenn ich jede laufende Sitzung für meinen Benutzer automatisch fortsetzen könnte, wenn ich mich anmelde. Der einfachste Weg, dies zu tun, wäre, „screen -r“ zu meiner .bashrc hinzuzufügen, und das scheint gut zu funktionieren. Ich frage mich nur, ob dies unter Bedingungen, die ich noch nicht getestet habe, etwas kaputt machen wird. Kann mir hier jemand mit Erfahrung sagen, ob ich das tun sollte?
Antwort1
Sie müssen screen -R -d
sich automatisch mit einer vorhandenen Sitzung verbinden (sofern vorhanden) und andernfalls eine Sitzung erstellen.
Stell sicher, dass dutun Sie dies nur auf interaktiven Shells. Bash-Quellen ~/.bashrc
sogar für nicht interaktive Shells, wenn der übergeordnete Prozess rshd oder sshd ist (dies wird in der Dokumentation erwähnt, kann aber leicht übersehen werden). Sie können erkennen, dass eine Shell interaktiv ist, weil sie $-
enthält i
.
case $- in
*i*) screen -Rd;;
esac
Dies ermöglicht Ihnen nicht ohne Weiteres, unterschiedliche Bildschirmsitzungen in unterschiedlichen Terminals auszuführen.
Sie müssen sich vom Bildschirm trennen und dann die übergeordnete Shell beenden, um sich abzumelden. Dies kann durch die Verwendung exec screen
von anstelle von gelöst werden screen
.
Wenn Sie eine andere Shell als eine Login-Shell starten, gelangen Sie in den Bildschirm, was Sie in den meisten Fällen nicht wollen. Ich würde dies zumindest darauf beschränken, wenn Sie direkt in einer interaktiven SSH-Sitzung laufen, mit etwas wie dem Folgenden in Ihrem ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Seien Sie vorsichtig, wenn Sie komplexe Dinge mit Ihrem Gerät tun, .bashrc
da ein Fehler, der zum Beenden der Shell führt, die Anmeldung erschweren würde.
Was ichempfehlenbesteht darin, die Shell-Initialisierungsdateien auf dem Server nicht zu ändern, sondern screen explizit vom Client aus auszuführen, wie in
ssh -t host.example.com screen -R -d
(Sie würden wahrscheinlich einen Shell-Alias oder eine Verknüpfung zur Desktop-Umgebung auf dem Client erstellen.) Auf diese Weise können Sie problemlos festlegen, dass der Bildschirm nicht ausgeführt werden soll, einen alternativen Sitzungsnamen angeben usw.
Antwort2
Ihre X-Server-Startskripte starten häufig eine neue Shell, zB wenn Sie sich mit gdm in der „Benutzerdefinierten Sitzung“ anmelden.
Ich denke, dass alles, was nicht beendet wird, dazu führen kann, dass Ihr X-Start hängen bleibt. Dazu gehört auch screen -r
.