Disconnettere le sessioni RDP rimaste aperte sul server

Quando si superano il numero massimo di connessioni contemporanee ai Servizi Terminal di Windows – che in modalità amministratore sono limitate a 2 – risulta impossibile ricollegarsi ed amministrare il server. Questo succede soprattutto quando vengono state lasciate aperte delle sessioni da alcuni utenti che non si disconnettono correttamente – sia deliberatamente chiudendo il client di Desktop Remoto senza effettuare il logoff, che involontariamente a causa della caduta della connessione.

Avviso di Servizi Terminal

Per ripristinare il servizio senza riavviare il server è necessario eseguire alcuni comandi, da console oppure tramite telnet/SSH.

Ottenere la lista delle sessioni aperte

Per prima cosa è necessario conoscere quali sessioni sono rimaste appese sul server.

QUERY SESSION /SERVER:nomeserver

Il risultato del comando è una tabella con tutte le sessioni del server, compreso la console e la sessione RDP riservata al login/logoff. L’opzione /server può essere omessa: nel caso viene eseguita la query in locale.

NOMESESSIONE NOMEUTENTE ID STATO TIPO PERIFERICA
console 0 Conn wdcon
rdp-tcp 65536 Attendi connessione rdpwd
9 ConnQ
>rdp-tcp#19 davidebia 10 Attivo rdpwd

Per le operazioni successive il valore da segnare è il nome della sessione, che nell’esempio corrisponde a rdp-tcp#19.

Forzare la disconnessione

A questo punto, conoscendo il nome delle sessioni da chiudere, è possibile procedere alla disconnessione, una alla volta.

LOGOFF nomesessione /SERVER:nomeserver

Viene eseguito un normale logoff, con salvataggio del profilo ed esecuzione degli script di logout – è normale che richieda qualche minuto per i profili di grosse dimensioni.

Bypassare firewall e protezioni da remoto

Eseguendo le operazioni descritte da LAN o in locale non dovrebbero esserci particolari difficoltà, invece se l’host da ripristinare è esposto su Internet è probabile che la porta UDP 135 del protocollo RPC sia chiusa da un firewall.

Errore 1722 durante la ricezione dei nomi sessione
Errore [1722]:Server RPC non disponibile.

La soluzione migliore per bypassare il problema è quella di progettare una VPN o di installare un server SSH. In questo modo è possibile eseguire i comandi come se fossimo in LAN o locale senza compromettere la sicurezza del server. Come soluzione di emergenza, è possibile tuttavia utilizzare alcuni espedienti:

  • Se è un server di posta (mail server), molto probabilmente è possibile creare degli account “eseguibili”, quindi creare un apposito script batch/WSH da caricare sul server.
  • Se è un server web, molto probabilmente sono presenti PHP, ASP o ASP.NET. Tutti questi linguaggi hanno la possibilità di eseguire comandi e leggere l’output.

In tutti i casi è fortemente consigliato proteggere l’esecuzione della procedura con login/password.