Ist es eine gute Idee, "screen -r" in mein .bashrc einzufügen?

17

Ich möchte screen verwenden, um ssh-Sitzungen auf meinem Server am Leben zu erhalten. Es wäre schön, wenn ich automatisch eine laufende Sitzung für meinen Benutzer wieder aufnehmen könnte, wenn ich mich anmelde. Der einfache Weg, dies zu tun, wäre das Hinzufügen von "screen -r" zu meinem .bashrc, und dies scheint gut zu funktionieren. Ich frage mich nur, ob dies unter Bedingungen, die ich noch nicht getestet habe, irgendetwas kaputt machen wird. Wer mit Erfahrung hier kann mir sagen, ob ich das tun soll?

marcusw
quelle

Antworten:

20

Sie müssen screen -R -dsich automatisch an eine vorhandene Sitzung anschließen, falls eine vorhanden ist, und ansonsten eine Sitzung erstellen.

Stellen Sie sicher, dass Sie dies nur bei interaktiven Shells tun . Bash-Quellen ~/.bashrcauch für nicht interaktive Shells, deren übergeordneter Prozess rshd oder sshd ist (dies wird in der Dokumentation erwähnt, ist aber leicht zu übersehen). Sie können feststellen, dass eine Shell interaktiv ist, weil sie $-enthält i.

case $- in
  *i*) screen -Rd;;
esac

Auf diese Weise können Sie nicht einfach verschiedene Bildschirmsitzungen in verschiedenen Terminals ausführen.

Sie müssen sich vom Bildschirm trennen und dann die übergeordnete Shell verlassen, um sich abzumelden. Dies kann gelöst werden, indem exec screenanstelle von verwendet wird screen.

Wenn Sie eine andere Shell als eine Anmeldeshell starten, wird der Bildschirm angezeigt, was Sie die meiste Zeit nicht möchten. Ich würde dies zumindest einschränken, wenn Sie direkt in einer interaktiven SSH-Sitzung mit so etwas wie dem Folgenden in Ihrer ~/.bash_profile:

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

Seien Sie vorsichtig, wenn Sie komplexe Dinge mit Ihrem .bashrcals Fehler ausführen, der das Beenden der Shell zur Folge hat. Dies würde die Anmeldung erschweren.


Ich empfehle , die Shell-Initialisierungsdateien nicht auf dem Server zu ändern, sondern den Bildschirm wie in explizit vom Client aus auszuführen

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 einfach festlegen, dass der Bildschirm nicht ausgeführt werden soll, einen alternativen Sitzungsnamen angeben usw.

Gilles 'SO - hör auf böse zu sein'
quelle
Perfekt. Sollte in der Manpage sein.
Marcusw
Ist es nicht besser für ssh zu rennen screen -D -Roder überhaupt screen -D -RR?
Niutech
2

Ihre X-Server-Startskripte starten häufig eine neue Shell, z. B. wenn Sie sich mit gdm über die "User Defined Session" anmelden.

Ich denke, dass alles, was nicht beendet wird, dazu führen kann, dass Ihr X-Start nicht mehr reagiert. Das würde beinhalten screen -r.

Mikel
quelle
X-Server-Startskripte werden nicht ausgeführt .bashrc. Es gibt jedoch auch andere Umstände, unter denen dies ein Problem darstellen würde, z. B. beim Ausführen ssh host.example.com somecommand(seltsamerweise wird bash .bashrcdann ausgeführt).
Gilles 'SO- hör auf böse zu sein'
In einigen Distributionen ist dies der Fall, wenn Sie "Benutzerdefinierte Sitzung" auswählen. Unter Ubuntu bezieht es explizit .profile, andere rufen .xsession in einer Anmeldeshell auf, was normalerweise .bash_profile bedeutet, und die meisten Benutzer beziehen .bashrc aus ihrem .bash_profile.
Mikel