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.
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.