--- title: Distribuzione Client weight: 400 pre: "2.4. " description: "Documentazione RustDesk su Distribuzione Client. Consulta le guide per installazione, configurazione, distribuzione e risoluzione dei problemi." keywords: ["rustdesk client deployment", "rustdesk powershell deploy", "rustdesk mass deployment", "rustdesk intune", "rustdesk rmm", "rustdesk silent deployment"] --- ## Risposta rapida Per distribuzioni su larga scala, usa script, pacchetti MSI o strumenti RMM/MDM in modo che RustDesk venga installato automaticamente con la configurazione corretta del server. Il metodo migliore dipende soprattutto dal sistema operativo e dallo stack di gestione che utilizzi già. ## Punti chiave - Host del server o indirizzo `ID Server` - Chiave pubblica del server self-hosted - `API Server` opzionale per il login Pro - Una stringa di configurazione o un metodo di packaging adatto ai tuoi strumenti Il modo più semplice è utilizzare un client personalizzato, https://twitter.com/rustdesk/status/1788905463678951787. Puoi distribuire utilizzando diversi metodi, alcuni sono coperti in [Configurazione Client](https://rustdesk.com/docs/en/self-host/client-configuration/). In alternativa, puoi utilizzare script di distribuzione di massa con il tuo RMM, Intune, ecc. L'ID e la password sono outputtati dallo script. Dovresti raccogliere questo o dividerlo in script diversi per raccogliere l'ID e la password. La password permanente può essere cambiata da casuale a una che preferisci modificando il contenuto dentro `()` dopo `rustdesk_pw` alla tua password preferita per PowerShell e la riga corrispondente per qualsiasi altra piattaforma. ## PowerShell ```powershell $ErrorActionPreference= 'silentlycontinue' # Assegna il valore della password casuale alla variabile password $rustdesk_pw=(-join ((65..90) + (97..122) | Get-Random -Count 12 | % {[char]$_})) # Ottieni la tua stringa di configurazione dal tuo portale Web e compila qui sotto $rustdesk_cfg="configstring" ################################## Per favore non modificare sotto questa linea ######################################### # Esegui come amministratore e rimani nella directory corrente if (-Not ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) { if ([int](Get-CimInstance -Class Win32_OperatingSystem | Select-Object -ExpandProperty BuildNumber) -ge 6000) { Start-Process PowerShell -Verb RunAs -ArgumentList "-NoProfile -ExecutionPolicy Bypass -Command `"cd '$pwd'; & '$PSCommandPath';`""; Exit; } } # Questa funzione restituirà l'ultima versione e il link di download come oggetto function getLatest() { $Page = Invoke-WebRequest -Uri 'https://github.com/rustdesk/rustdesk/releases/latest' -UseBasicParsing $HTML = New-Object -Com "HTMLFile" try { $HTML.IHTMLDocument2_write($Page.Content) } catch { $src = [System.Text.Encoding]::Unicode.GetBytes($Page.Content) $HTML.write($src) } # Link di esempio corrente: https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.exe $Downloadlink = ($HTML.Links | Where {$_.href -match '(.)+\/rustdesk\/rustdesk\/releases\/download\/\d{1}.\d{1,2}.\d{1,2}(.{0,3})\/rustdesk(.)+x86_64.exe'} | select -first 1).href # correzione bug - a volte devi sostituire "about:" $Downloadlink = $Downloadlink.Replace('about:', 'https://github.com') $Version = "unknown" if ($Downloadlink -match './rustdesk/rustdesk/releases/download/(?.*)/rustdesk-(.)+x86_64.exe') { $Version = $matches['content'] } if ($Version -eq "unknown" -or $Downloadlink -eq "") { Write-Output "ERRORE: Versione o link di download non trovato." Exit } # Crea oggetto da restituire $params += @{Version = $Version} $params += @{Downloadlink = $Downloadlink} $Result = New-Object PSObject -Property $params return($Result) } $RustDeskOnGitHub = getLatest $rdver = ((Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\RustDesk\").Version) if ($rdver -eq $RustDeskOnGitHub.Version) { Write-Output "RustDesk $rdver è la versione più recente." Exit } if (!(Test-Path C:\Temp)) { New-Item -ItemType Directory -Force -Path C:\Temp | Out-Null } cd C:\Temp Invoke-WebRequest $RustDeskOnGitHub.Downloadlink -Outfile "rustdesk.exe" Start-Process .\rustdesk.exe --silent-install Start-Sleep -seconds 20 $ServiceName = 'Rustdesk' $arrService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue if ($arrService -eq $null) { Write-Output "Installazione servizio" cd $env:ProgramFiles\RustDesk Start-Process .\rustdesk.exe --install-service Start-Sleep -seconds 20 $arrService = Get-Service -Name $ServiceName } while ($arrService.Status -ne 'Running') { Start-Service $ServiceName Start-Sleep -seconds 5 $arrService.Refresh() } cd $env:ProgramFiles\RustDesk\ .\rustdesk.exe --get-id | Write-Output -OutVariable rustdesk_id .\rustdesk.exe --config $rustdesk_cfg .\rustdesk.exe --password $rustdesk_pw Write-Output "..............................................." # Mostra il valore della variabile ID Write-Output "ID RustDesk: $rustdesk_id" # Mostra il valore della variabile password Write-Output "Password: $rustdesk_pw" Write-Output "..............................................." ``` ## Windows batch/cmd ```bat @echo off REM Assegna il valore della password casuale alla variabile password setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION set alfanum=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 set rustdesk_pw= for /L %%b in (1, 1, 12) do ( set /A rnd_num=!RANDOM! %% 62 for %%c in (!rnd_num!) do ( set rustdesk_pw=!rustdesk_pw!!alfanum:~%%c,1! ) ) REM Ottieni la tua stringa di configurazione dal tuo portale Web e compila qui sotto set rustdesk_cfg="configstring" REM ############################### Per favore non modificare sotto questa linea ######################################### if not exist C:\Temp\ md C:\Temp\ cd C:\Temp\ curl -L "https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.exe" -o rustdesk.exe rustdesk.exe --silent-install timeout /t 20 cd "C:\Program Files\RustDesk\" rustdesk.exe --install-service timeout /t 20 for /f "delims=" %%i in ('rustdesk.exe --get-id ^| more') do set rustdesk_id=%%i rustdesk.exe --config %rustdesk_cfg% rustdesk.exe --password %rustdesk_pw% echo ............................................... REM Mostra il valore della variabile ID echo ID RustDesk: %rustdesk_id% REM Mostra il valore della variabile password echo Password: %rustdesk_pw% echo ............................................... ``` ## MSI Puoi anche usare msi invece di `rustdesk.exe --silent-install`. https://rustdesk.com/docs/en/client/windows/msi/ ## macOS Bash ```sh #!/bin/bash # Assegna il valore della password casuale alla variabile password rustdesk_pw=$(openssl rand -hex 4) # Ottieni la tua stringa di configurazione dal tuo portale Web e compila qui sotto rustdesk_cfg="configstring" ################################## Per favore non modificare sotto questa linea ######################################### # Richiesta password root per l'elevazione dei privilegi [ "$UID" -eq 0 ] || exec sudo bash "$0" "$@" # Specifica il punto di montaggio per il DMG (directory temporanea) mount_point="/Volumes/RustDesk" # Scarica il file rustdesk.dmg echo "Scaricando RustDesk ora" if [[ $(arch) == 'arm64' ]]; then rd_link=$(curl -sL https://github.com/rustdesk/rustdesk/releases/latest | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*/\d{1}.\d{1,2}.\d{1,2}/rustdesk.\d{1}.\d{1,2}.\d{1,2}.aarch64.dmg") dmg_file=$(echo $rd_link | grep -Eo "rustdesk.\d{1}.\d{1,2}.\d{1,2}.aarch64.dmg") curl -L "$rd_link" --output "$dmg_file" else rd_link=$(curl -sL https://github.com/rustdesk/rustdesk/releases/latest | grep -Eo "(http|https)://[a-zA-Z0-9./?=_-]*/\d{1}.\d{1,2}.\d{1,2}/rustdesk.\d{1}.\d{1,2}.\d{1,2}.x86_64.dmg") dmg_file=$(echo $rd_link | grep -Eo "rustdesk.\d{1}.\d{1,2}.\d{1,2}.x86_64.dmg") curl -L "$rd_link" --output "$dmg_file" fi # Monta il file DMG al punto di montaggio specificato hdiutil attach "$dmg_file" -mountpoint "$mount_point" &> /dev/null # Controlla se il montaggio è riuscito if [ $? -eq 0 ]; then # Sposta il contenuto del DMG montato nella cartella /Applications cp -R "$mount_point/RustDesk.app" "/Applications/" &> /dev/null # Smonta il file DMG hdiutil detach "$mount_point" &> /dev/null else echo "Impossibile montare il DMG RustDesk. Installazione interrotta." exit 1 fi # Esegui il comando rustdesk con --get-id e memorizza l'output nella variabile rustdesk_id cd /Applications/RustDesk.app/Contents/MacOS/ rustdesk_id=$(./RustDesk --get-id) # Applica nuova password a RustDesk ./RustDesk --server & /Applications/RustDesk.app/Contents/MacOS/RustDesk --password $rustdesk_pw &> /dev/null /Applications/RustDesk.app/Contents/MacOS/RustDesk --config $rustdesk_cfg # Termina tutti i processi chiamati RustDesk rdpid=$(pgrep RustDesk) kill $rdpid &> /dev/null echo "..............................................." # Controlla se rustdesk_id non è vuoto if [ -n "$rustdesk_id" ]; then echo "ID RustDesk: $rustdesk_id" else echo "Impossibile ottenere l'ID RustDesk." fi # Mostra il valore della variabile password echo "Password: $rustdesk_pw" echo "..............................................." echo "Per favore completa l'installazione su GUI, avviando RustDesk ora." open -n /Applications/RustDesk.app ``` ## Linux ```sh #!/bin/bash # Assegna un valore casuale alla variabile password rustdesk_pw=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1) # Ottieni la tua stringa di configurazione dal tuo portale Web e compila qui sotto rustdesk_cfg="configstring" ################################## Per favore non modificare sotto questa linea ######################################### # Controlla se lo script è in esecuzione come root if [[ $EUID -ne 0 ]]; then echo "Questo script deve essere eseguito come root." exit 1 fi # Identifica OS if [ -f /etc/os-release ]; then # freedesktop.org e systemd . /etc/os-release OS=$NAME VER=$VERSION_ID UPSTREAM_ID=${ID_LIKE,,} # Fallback a ID_LIKE se ID non era 'ubuntu' o 'debian' if [ "${UPSTREAM_ID}" != "debian" ] && [ "${UPSTREAM_ID}" != "ubuntu" ]; then UPSTREAM_ID="$(echo ${ID_LIKE,,} | sed s/\"//g | cut -d' ' -f1)" fi elif type lsb_release >/dev/null 2>&1; then # linuxbase.org OS=$(lsb_release -si) VER=$(lsb_release -sr) elif [ -f /etc/lsb-release ]; then # Per alcune versioni di Debian/Ubuntu senza il comando lsb_release . /etc/lsb-release OS=$DISTRIB_ID VER=$DISTRIB_RELEASE elif [ -f /etc/debian_version ]; then # Debian più vecchio, Ubuntu, ecc. OS=Debian VER=$(cat /etc/debian_version) elif [ -f /etc/SuSE-release ]; then # SuSE più vecchio ecc. OS=SuSE VER=$(cat /etc/SuSE-release) elif [ -f /etc/redhat-release ]; then # Red Hat più vecchio, CentOS, ecc. OS=RedHat VER=$(cat /etc/redhat-release) else # Fallback a uname, ad es. "Linux ", funziona anche per BSD, ecc. OS=$(uname -s) VER=$(uname -r) fi # Installa RustDesk echo "Installazione di RustDesk" if [ "${ID}" = "debian" ] || [ "$OS" = "Ubuntu" ] || [ "$OS" = "Debian" ] || [ "${UPSTREAM_ID}" = "ubuntu" ] || [ "${UPSTREAM_ID}" = "debian" ]; then wget https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.deb apt-get install -fy ./rustdesk-1.2.6-x86_64.deb > null elif [ "$OS" = "CentOS" ] || [ "$OS" = "RedHat" ] || [ "$OS" = "Fedora Linux" ] || [ "${UPSTREAM_ID}" = "rhel" ] || [ "$OS" = "Almalinux" ] || [ "$OS" = "Rocky*" ] ; then wget https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-0.x86_64.rpm yum localinstall ./rustdesk-1.2.6-0.x86_64.rpm -y > null else echo "OS non supportato" # qui potresti chiedere all'utente il permesso di provare a installare comunque # se dicono sì, allora fai l'installazione # se dicono no, esci dallo script exit 1 fi # Esegui il comando rustdesk con --get-id e memorizza l'output nella variabile rustdesk_id rustdesk_id=$(rustdesk --get-id) # Applica nuova password a RustDesk rustdesk --password $rustdesk_pw &> /dev/null rustdesk --config $rustdesk_cfg systemctl restart rustdesk echo "..............................................." # Controlla se rustdesk_id non è vuoto if [ -n "$rustdesk_id" ]; then echo "ID RustDesk: $rustdesk_id" else echo "Impossibile ottenere l'ID RustDesk." fi # Mostra il valore della variabile password echo "Password: $rustdesk_pw" echo "..............................................." ``` ## Distribuzione esplicita per nuovi dispositivi Per impostazione predefinita, un client RustDesk viene registrato sul server self-hosted quando si connette al server per la prima volta. In modalità normale non è richiesto alcun passaggio di distribuzione aggiuntivo. Se abiliti **Impostazioni → Altro → Richiedi distribuzione per i nuovi dispositivi** nella console web del server, i nuovi dispositivi devono essere distribuiti esplicitamente prima di potersi registrare su questo server. Crea un token API dalla console web del server con un account amministratore, quindi esegui il comando di distribuzione su ogni nuovo dispositivo desktop dopo aver installato RustDesk e averlo configurato per usare il tuo server self-hosted. ### Windows, macOS e Linux Su Windows, esegui Prompt dei comandi o PowerShell come amministratore: ```bat rustdesk --deploy --token ``` Su macOS e Linux, esegui il comando con `sudo`: ```sh sudo rustdesk --deploy --token ``` ### ID personalizzato opzionale Per distribuire il dispositivo con un ID RustDesk specifico, aggiungi `--id `: ```sh rustdesk --deploy --token --id ``` Se l'ID è già usato da un'altra macchina, la distribuzione non riesce e RustDesk segnala che l'ID è già in uso. ### Android Android non usa il flusso di distribuzione da riga di comando. Quando il server richiede la distribuzione e il client Android non è ancora stato distribuito, RustDesk mostra un prompt **Deploy**. Tocca **OK**, inserisci il token API nella finestra di dialogo di distribuzione e, facoltativamente, inserisci un ID personalizzato. Puoi anche aprire manualmente la stessa finestra da **Impostazioni → Deploy**. Dopo il completamento della distribuzione, il dispositivo viene aggiunto all'elenco dei dispositivi del server e il client può registrarsi normalmente.