¿Es una buena idea poner "screen -r" en mi .bashrc?

17

Me gustaría usar la pantalla para mantener vivas las sesiones ssh en mi servidor. Sería bueno si pudiera reanudar automáticamente cualquier sesión en ejecución para mi usuario cuando inicie sesión. La forma más sencilla de hacerlo sería agregar "screen -r" a mi .bashrc, y esto parece funcionar bien. Me pregunto si esto romperá algo en condiciones que aún no he probado. ¿Alguien con experiencia aquí que pueda decirme si esto es lo que debo hacer?

marcusw
fuente

Respuestas:

20

Es necesario screen -R -dque ambos se adjunten automáticamente a una sesión existente si existe y, de lo contrario, cree una sesión.

Asegúrese de hacer esto solo en shells interactivos . Fuentes de Bash ~/.bashrcincluso para shells no interactivos cuando su proceso padre es rshd o sshd (esto se menciona en la documentación, pero es fácil pasarlo por alto). Se puede decir que un shell es interactivo porque $-contiene i.

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

Esto no le permitirá ejecutar fácilmente diferentes sesiones de pantalla en diferentes terminales.

Deberá desconectarse de la pantalla y luego salir del shell principal para cerrar sesión. Esto se puede resolver usando en exec screenlugar de screen.

Si inicia un shell que no sea un shell de inicio de sesión, aparecerá en la pantalla, que no es lo que desea la mayor parte del tiempo. Al menos restringiría esto a cuando se ejecuta directamente en una sesión ssh interactiva, con algo como lo siguiente en su ~/.bash_profile:

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

Tenga cuidado cuando hace cosas complejas con su, .bashrcya que un error que hace que el shell se cierre dificultará el inicio de sesión.


Lo que recomiendo es que no modifique sus archivos de inicialización de shell en el servidor, sino que ejecute la pantalla explícitamente desde el cliente, como en

ssh -t host.example.com screen -R -d

(Probablemente crearía un alias de shell o acceso directo de entorno de escritorio en el cliente). De esa manera, puede elegir fácilmente no ejecutar la pantalla, especificar un nombre de sesión alternativo, etc.

Gilles 'SO- deja de ser malvado'
fuente
Perfecto. Debería estar en la página del manual.
marcusw
¿No es mejor ejecutar ssh screen -D -Ro incluso screen -D -RR?
niutech
2

Los scripts de inicio del servidor X a menudo inician un nuevo shell, por ejemplo, si inicia sesión con gdm mediante la "Sesión definida por el usuario".

Creo que cualquier cosa que no salga puede hacer que su inicio de X se cuelgue. Eso incluiría screen -r.

Mikel
fuente
Los scripts de inicio del servidor X no se ejecutarán .bashrc. Pero hay otras circunstancias en las que esto sería un problema, por ejemplo, cuando se ejecuta ssh host.example.com somecommand(extrañamente, bash se ejecuta .bashrcentonces).
Gilles 'SO- deja de ser malvado'
Está en algunas distribuciones si elige "Sesión definida por el usuario". En Ubuntu, obtiene explícitamente .profile, otros llaman .xsession desde dentro de un shell de inicio de sesión, lo que normalmente significaría .bash_profile, y la mayoría de los usuarios obtienen .bashrc desde dentro de su .bash_profile.
Mikel