Come eseguire comandi da remoto con un account Windows

Breve guida all'uso di PsExec, una potente e versatile utilità che permette di amministrare da riga di comando qualunque PC Windows senza trovarsi fisicamente di fronte alla macchina.

Tutti conoscono le principali soluzioni per il controllo a distanza di sistemi Windows, Linux, macOS e dispositivi mobili: esse consentono di gestire da remoto qualunque PC, come se ci si trovasse fisicamente seduti dinanzi alla macchina. Ove disponibile, si può visualizzare l’interfaccia utente della macchina remota e interagire con tutti gli elementi: finestre, menu, icone e così via.

Con PowerShell e WinRM è possibile gestire da remoto i PC in rete locale ma gli amministratori di sistemi Windows hanno da tempo a disposizione uno strumento ufficiale Microsoft chiamato PsExec che fa parte del più ampio pacchetto di utilità PsTools sviluppato da Mark Russinovich.

PsExec è un programma di piccole dimensioni (pesa appena 1 MB su disco) che consente di eseguire comandi da remoto su qualunque sistema Windows, non soltanto Windows 11, Windows 10, Windows 7 e Windows 8 ma anche i sistemi Windows Server 2008 (e successivi) oltre alle versioni di Windows oggi non più supportate da Microsoft.

Con PsExec è possibile eseguire qualunque comando su un altro PC Windows servendosi del prompt (cmd). Da una finestra PowerShell bisogna necessariamente digitare cmd e premere Invio prima di utilizzare PsExec.

Requisiti per utilizzare PsExec e controllare i PC a distanza

Per utilizzare PsExec senza alcuna difficoltà è necessario che i sistemi Windows siano collegati in rete locale e che su entrambi l’interfaccia di rete in uso sia posta su Rete privata.
Su tutti e due i sistemi devono cioè essere selezionate le opzioni Attiva individuazione rete e Condivisione di file e stampanti: per default entrambe le impostazioni sono abilitate proprio scegliendo Rete privata nelle proprietà della rete.

È possibile portarsi rapidamente all’interno della schermata di configurazione premendo Windows+R, digitando control, cliccando su Visualizza per icone piccole, su Centro connessioni di rete e condivisione, Modifica impostazioni di condivisione avanzate.
In alternativa basta premere Windows+R quindi incollare quanto segue nel campo Apri:

control /name Microsoft.NetworkAndSharingCenter /page Advanced

L’utente che si serve di PsExec per eseguire comandi sull’altro PC deve inoltro conoscere le credenziali di un account amministrativo presente sulla macchina da controllare.

Quando si stabilisce una connessione con un computer remoto usando PsExec, l’utilità accede automaticamente alla cartella amministrativa admin$ presente sul PC di destinazione e vi copia un file chiamato psexesvc.exe (temporaneamente memorizzato nella cartella di sistema \windows\system32).
La cartella amministrativa admin$ punta infatti proprio alla directory in cui è installato Windows (%systemroot%).

Dal proprio PC suggeriamo di premere Windows+R quindi digitare \\NOME-PC\ADMIN$ sostituendo a NOME-PC il nome del computer da amministrare a distanza.
Si dovrà vedere il contenuto della cartella in cui Windows è installato; diversamente PsExec non funzionerà.
Nel caso in cui si ottenesse l’errore Accesso negato, bisogna attivare le condivisioni amministrative sul PC da amministratore con una semplice modifica a livello di registro di sistema:

reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1

Gli utilizzi più avanzati e potenti di PsExec includono l’avvio di sessioni interattive su sistemi remoti e la possibilità di usare strumenti a riga di comando come ipconfig che normalmente non hanno alcuna capacità di mostrare il loro output su sistemi remoti.

Come utilizzare PsExec per eseguire comandi da remoto su un altro PC Windows

Per eseguire PsExec basta scaricare il pacchetto completo di PsTools quindi estrarne il contenuto in una cartella di propria scelta (ad esempio c:\pstools).

Digitando il comando seguente ci si potrà collegare al computer NOME-PC collegato in rete locale e, in questo caso, pulire la cache del resolver DNS locale:

psexec \\NOME-PC -u username -p password ipconfig /flushdns

Non specificando username e password dell’account presente su NOME-PC, PsExec utilizzerà le credenziali dello stesso account Windows attualmente in uso sulla macchina dalla quale il programma è stato avviato. Ovviamente lo stesso utente, con la medesima password, dovrà necessariamente esistere sul sistema NOME-PC di destinazione e disporre delle credenziali amministrative altrimenti si otterrà un errore.

Come si vede nell’immagine, invocando psexec64, si può eseguire la versione a 64 bit della stessa utilità.

Con il comando seguente si chiederà a PsExec di riavviare il sistema remoto trascorsi 15 secondi:

psexec -i \\NOME-PC "cmd.exe" "/c shutdown /f /r /t 15"

Digitando il comando che segue si può passare alla modalità interattiva ovvero aprire un’istanza del prompt dei comandi sul sistema di destinazione e interagirvi come se ci si trovasse dinanzi al computer

psexec -i \\NOME-PC cmd

Come si può verificare impartendo i comandi hostname (che restituisce il nome del PC in uso) e whoami (che restituisce il nome del PC e l’account), tutti i comandi che si utilizzeranno da qui in avanti avranno effetto sul sistema remoto (NOME-PC).

Si possono eventualmente eseguire anche comandi PowerShell usando la sintassi powershell -ExecutionPolicy RemoteSigned -command "COMANDO" (sostituire al posto di COMANDO le istruzioni da avviare).

Per uscire dalla sessione interattiva iniziata con il comando cmd, basta scrivere exit e premere Invio.

PsExec permette di eseguire gli stessi comandi su più PC usando la sintassi seguente:

psexec \\PC1,\\PC2,\\PC3 ipconfig /all

I nomi dei PC da raggiungere possono anche essere inseriti in una lista salvata come file di testo (usare il comando psexec @c:\Users\Michele\lista.txt).

Infine una nota importante: PsExec è in sé un software assolutamente benigno e legittimo. Il file psexesvc.exe viene automaticamente rimosso dal sistema controllato a distanza non appena si chiude la sessione di lavoro interattiva o si riceve l’output del comando indicato. Alcuni motori di scansione antimalware possono comunque segnalare l’utilizzo di PsExec: in tal caso si deve configurare un’apposita eccezione.

I servizi LanmanServer e LanmanWorkstation devono risultare sempre attivi sul PC da amministrare con le relative porte TCP 445 e UDP 137 aperte e in ascolto.
Dal sistema usato dall’amministratore si può ad esempio aprire una finestra PowerShell e digitare il comando Test-NetConnection -ComputerName NOME-PC -Port 445 per verificare ad esempio che la porta TCP 445 sia aperta sul sistema NOME-PC.

Per approfondire i possibili utilizzi di PsExec suggeriamo anche la lettura dell’articolo in cui vediamo come accedere al desktop di un altro utente senza conoscere la password.

Ti consigliamo anche

Link copiato negli appunti