---
title: Distribuzione Client
weight: 400
pre: "<b>2.4. </b>"
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"]
---

<!-- GEO-LOCALIZED-INTRO:START -->

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

<!-- GEO-LOCALIZED-INTRO:END -->

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/(?<content>.*)/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 <version>", 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 > /dev/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 > /dev/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](/docs/en/self-host/rustdesk-server-pro/console/#api-token) dalla console web del server con un account amministratore. Il token deve avere l'autorizzazione **Dispositivi** impostata su **Lettura e scrittura**. 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 <api_token>
```

Su macOS e Linux, esegui il comando con `sudo`:

```sh
sudo rustdesk --deploy --token <api_token>
```

### ID personalizzato opzionale

Per distribuire il dispositivo con un ID RustDesk specifico, aggiungi `--id <custom_id>`:

```sh
rustdesk --deploy --token <api_token> --id <custom_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.
