GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo encontrar sesiones xrdp desconectadas?

Solución 1:

Aquí hay una forma de obtener una lista de sesiones xrdp desconectadas. Se basa en el hecho de que xrdp El servidor es, en el uso normal del administrador de sesión X, el único cliente que establece una conexión TCP con Xvnc Servidor de visualización del sistema X Window. Cuando una sesión xrdp está activa, el servidor de pantalla Xvnc asociado tiene dos conexiones TCP, una en el estado ESTABLECIDO y la otra en el estado LISTEN. Eso se parece a esto usando lsof(1) programa.

$ sudo lsof  -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999 
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Xvnc    1625 guest    1u  IPv4 252910      0t0  TCP 127.0.0.1:5910 (LISTEN)
Xvnc    1625 guest    9u  IPv4 261226      0t0  TCP 127.0.0.1:5910->127.0.0.1:35242 (ESTABLISHED)

Si el usuario de la sesión remota la abandona cerrando la conexión RDP (o, en el caso de una sesión Apache Guacamole RDP, cerrando la ventana del navegador), se verá así:

COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
Xvnc    1625 guest    1u  IPv4 252910      0t0  TCP 127.0.0.1:5910 (LISTEN)

Observe que no hay una conexión ESTABLECIDA en este proceso del servidor de pantalla Xvnc desconectado. Entonces, cualquier proceso Xvnc que solo esté escuchando es una sesión desconectada.

Aquí hay un script de shell (llamado lsdisconnected ) que muestra el PID y el USUARIO para cada sesión remota desconectada. Utiliza lsof(1) y bostezar(1) para implementar la lógica de conexión.

#!/bin/bash
sudo lsof -FRgpLT -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999  |
gawk '
      match($0,/^p([0-9]+)/,       p) {pid = p[1]; pids[pid]=0; } ;
      match($0,/^L([A-Za-z0-9]+)/, p) {user[pid] = p[1]; } ;
      /TST=LISTEN/ {pids[pid] = pids[pid] - 1 ;};
      /TST=ESTABLISHED/{pids[pid] = pids[pid] + 1};
      END {
          for (pid in pids){
              if (pids[pid] < 0) {
                  print pid, user[pid];
              }
          }};
     '

Esta es una forma práctica de encontrar sesiones de escritorio remoto desconectadas; funciona inmediatamente después de la desconexión, sin necesidad de usar un tiempo de inactividad.

Para aquellos que no estén familiarizados con lsof(1) aquí hay una explicación de los parámetros de la línea de comando en este ejemplo.

  • -b -w evita las esperas del núcleo lsof. No son necesarios aquí.
  • -n evita las búsquedas DNS de nombres de host.
  • -c /^Xvnc$/b busca procesos con el nombre de comando exacto Xvnc, usando una expresión regular.
  • -a le dice a lsof que use AND, no OR, al filtrar.
  • -iTCP:5900-5999 filtros por puertos TCP numerados 5900 - 5999, los que se utilizan para las conexiones de visualización X.)

Solución 2:

Finalmente encontré una solución a esto.
En primer lugar, tuve que instalar un pequeño programa llamado xprintidle :

sudo apt-get install xprintidle

Después de eso, escribí un pequeño script bash que primero busca todas las pantallas utilizadas por Xvnc y xrdp y luego verifica esas sesiones de visualización si han estado inactivas durante más de una cantidad de minutos:

#!/bin/bash

displays=`ps aux | grep Xvnc | grep -v 'grep\|sed' | sed -r 's|.*(Xvnc :[0-9]*).*|\1|' | cut -d' ' -f 2`
limit=180


date
echo "Checking for inactive sessions!"
while read -r d; do
    export DISPLAY=$d
    idle=`xprintidle`
    idleMins=$(($idle/1000/60))
    if [[ $idleMins -gt $limit ]]; then
        echo "WARN Display $d is logged in for longer than ${limit}min (${idleMins}m)"
    else
        echo "INFO Display $d is still ok (${idleMins}m)"
    fi  
done <<< "$displays"

Linux
  1. Cómo usar BUSCAR en Linux

  2. Cómo encontrar un archivo en Linux

  3. Cómo instalar XRDP en CentOS 7

  4. ¿Cómo integrar el comando Mv después del comando Buscar?

  5. ¿Cómo encontrar el estado de wlan0?

Cómo configurar Xrdp sobre Xorg en Linux con sesiones múltiples

Cómo encontrar la versión de openSUSE

Cómo encontrar la versión de Ubuntu

Cómo instalar Xrdp en Ubuntu 20.04

Cómo encontrar el último inicio de sesión en Linux

Cómo encontrar archivos en Debian