pantalla de inicio automático al iniciar sesión ssh

19

He estado leyendo sobre cómo iniciar automáticamente una pantalla cuando estoy sshen un servidor remoto. Me gustaría agregar una línea simple .bash_profilepara comenzar screencuando entro sshy NO salir de mi conexión remota cuando desconecto la pantalla.

He estado buscando en exec screeny casi todas las combinaciones de -d, -r, -Dy -Rno puedo entender por qué banderas que necesito.

Lo ideal sería escribir ssh whatevere iniciar sesión en el servidor en un nuevo screeno puede volver a conectar una pantalla antigua, me gustaría saber cómo hacer ambas cosas para ver cuál me gusta más. Luego puedo escribir Ctrl ado Ctrl dy hacer que me devuelva al sshinicio de sesión normal para ese servidor (donde verías el motd). Desde allí puedo screen -rvolver a la pantalla que quiera, o presionar Ctrl dnuevamente para cerrar sesión.

Ronald Dregan
fuente

Respuestas:

19

Un simple screen -Rdebería hacer el truco.

Para verificar esto, agregué screen -Ra mi .bash_profile en un servidor remoto, inicié sesión, me desconecté de la pantalla y regresé a un indicador de shell normal en el servidor remoto. Verificado con .bashrc también. Los inicios de sesión posteriores produjeron el resultado esperado (volver a adjuntar a la sesión de pantalla).

btanaka
fuente
¡Gracias! Estaba leyendo y tenía la impresión de que necesitaría una pantalla ejecutiva -R. Me alegro de que esto haya funcionado
Ronald Dregan
¿Es una mala idea poner logouto exitjusto después de esa línea st una sesión ssh se termina inmediatamente una vez que ctrl + D cierra la pantalla?
Griddo
Esto no funcionó para mí. Comencé unas pocas docenas de pantallas ya que la línea se ejecuta cada vez que comienza una sesión. ¿Cómo lo hiciste para que esto no suceda?
Thomas
11

Tuve problemas con la creación de 40 sesiones de pantalla en cascada con algunas de las soluciones al comenzar una nueva ventana o sesión de pantalla. Pude eliminar la pantalla en cascada y crear una nueva sesión si no existiera una con esto:

if [ -z "$STY" ]; then screen -R; fi

Comprueba si estás en una sesión de pantalla y se ejecuta screen -Rsi no lo estás. Sin la prueba, aparece el mensaje "¿Adjuntar desde el interior de la pantalla?" advertencia de la pantalla cada vez que crea una nueva ventana de pantalla.

seq3
fuente
+1 - así mejor que la screen -lsprueba que Tony mencionó
cwd
10

screen -RR se volverá a unir a la primera sesión disponible o creará una si es necesario.

usuario1187902
fuente
eso fue realmente útil ya que usar screen -R me estaba causando problemas con varias sesiones.
David V.
Esto es genial, gracias! Se conecta a la primera sesión "Independiente" encontrada (si hay alguna) e ignora las sesiones adjuntas. Por lo tanto, le permite iniciar sesión y tener varias ventanas abiertas, pero aún así asegúrese de que cada sesión tenga la protección de ejecutarse en una pantalla. ¡Nuestra gente de OPS te lo agradece!
Ian McGowan
8

Si entiendo tu necesidad, deberías intentar:

if $(screen -ls | grep -q pts); then screen -x; else screen -R; fi

Creará solo una sesión de pantalla, de lo contrario, se volverá a conectar a la existente en una ventana múltiple (incluso si tiene varias sesiones ssh, terminará en la misma sesión de pantalla)

Tony
fuente
Me gusta esta idea por su reconocimiento de que tenemos clientes SSH de múltiples ventanas (o, a veces, ingresamos directamente en la máquina). Es bastante flexible si usa algo como Bitvise y tiene múltiples ventanas de terminal abiertas: puede convertir ventanas de pantalla individuales en ventanas físicas separadas.
Piku
1
Todo esto puede ser reemplazado por screen -xR, que parece ser analizado como "adjuntar si hay algo a lo que adjuntar, de lo contrario crea una nueva pantalla".
Piskvor salió del edificio el
0

Aquí una pequeña extensión,

la secuencia de comandos para el control bashrc verifica si hay más de una sesión de pantalla separada. Si hay más, debe elegir la sesión de forma manual. Cuando hay una sesión separada, vuelve a esta sesión. Si sale de la sesión, la sesión ssh también se cerrará.

 #Start Screen
 if [ -z "$STY" ]; then

 value=$( screen -ls |grep '\<pts.*Detached\>' |wc -l )

 if [ $value -gt 1 ]; then

  screen -ls

 else

  screen -R

  echo 5 Sek. bis die SSH Session beendet wird.

  echo Strg + C - um ohne screen weiter zu arbeiten.

  sleep 6

  exit

 fi

fi
Thomas
fuente
0

Si desea conectarse automáticamente a una sesión de pantalla cuando se conecta a través de SSH, agregue el código a continuación en su máquina remota .bash_profileo .bashrcen la siguiente:

  • Inicie una nueva sesión de pantalla cada vez que se conecte a través de SSH.
  • Reutilice la sesión de pantalla separada ya existente , siempre comenzando con la última. Si no hay sesiones separadas disponibles, se inicia una nueva.
  • Cuando abre varias conexiones SSH a su máquina, obtendrá una sesión de pantalla diferente, ya que solo estamos reutilizando las desconectadas.
  • Evite bucles en caso de que esté agregando el script a su .bashrc

Aquí está el guión:

#!/bin/bash
#
#  Attaches to the first Detached Screen. Otherwise starts a new Screen.

# Only run if we are not already inside a running screen and only if in an SSH session.
if [[ -z "${STY}" && ! -z "${SSH_CLIENT}" ]]; then
  detached_screens=($(screen -ls | grep pts | grep -v Attached))

  for screen in "${detached_screens[@]}"; do
    if [[ "${screen}" == *".pts"* ]]; then
      IFS='.pts' read -ra split <<< "${screen}"
      for id in "${split[@]}"; do
        first_id="${id}"
        break
      done 
      break
    fi
  done

  screen -R $first_id
fi

PD: Si desea habilitar esto para la terminal local, elimine && ! -z "${SSH_CLIENT}en la primera línea.

Nicolas Garnier
fuente