---
title: Despliegue de Cliente
weight: 400
pre: "<b>2.4. </b>"
description: "Documentación de RustDesk sobre Despliegue de Cliente. Consulta guías de instalación, configuración, despliegue y solución de problemas."
keywords: ["rustdesk client deployment", "rustdesk powershell deploy", "rustdesk mass deployment", "rustdesk intune", "rustdesk rmm", "rustdesk silent deployment"]
---

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

## Respuesta rápida

Para despliegues grandes, use scripts, paquetes MSI o herramientas RMM/MDM para que RustDesk se instale automáticamente con la configuración correcta del servidor. El mejor método depende sobre todo del sistema operativo y de la plataforma de gestión que ya utilice.

## Puntos clave

- El host del servidor o la dirección de `ID Server`
- La clave pública del servidor autoalojado
- Un `API Server` opcional para el inicio de sesión Pro
- Una cadena de configuración o un método de empaquetado compatible con su herramienta

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

La forma más simple es usar un cliente personalizado, https://twitter.com/rustdesk/status/1788905463678951787.

Puedes desplegar usando varios métodos, algunos están cubiertos en [Configuración del Cliente](https://rustdesk.com/docs/en/self-host/client-configuration/).

Alternativamente, puedes usar scripts de despliegue masivo con tu RMM, Intune, etc. El ID y la contraseña son outputados por el script. Deberías recopilar esto o dividirlo en diferentes scripts para recopilar el ID y la contraseña.

La contraseña permanente puede cambiarse de aleatoria a una que prefieras modificando el contenido dentro de `()` después de `rustdesk_pw` a tu contraseña preferida para PowerShell y la línea correspondiente para cualquier otra plataforma.

## PowerShell

```powershell
$ErrorActionPreference= 'silentlycontinue'

# Asignar el valor de contraseña aleatoria a la variable contraseña
$rustdesk_pw=(-join ((65..90) + (97..122) | Get-Random -Count 12 | % {[char]$_}))

# Obtener tu cadena de configuración desde tu portal Web y rellenar abajo
$rustdesk_cfg="configstring"

################################## Por favor no edites debajo de esta línea #########################################

# Ejecutar como administrador y permanecer en el directorio actual
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;
    }
}

# Esta función devolverá la última versión y enlace de descarga como un objeto
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)
    }

    # Enlace de ejemplo actual: 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

    # corrección de bug - a veces necesitas reemplazar "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 "ERROR: Versión o enlace de descarga no encontrado."
        Exit
    }

    # Crear objeto para devolver
    $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 es la versión más reciente."
    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 "Instalando servicio"
    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 "..............................................."
# Mostrar el valor de la variable ID
Write-Output "ID RustDesk: $rustdesk_id"

# Mostrar el valor de la variable contraseña
Write-Output "Contraseña: $rustdesk_pw"
Write-Output "..............................................."
```

## Windows batch/cmd

```bat
@echo off

REM Asignar el valor de contraseña aleatoria a la variable contraseña
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 Obtener tu cadena de configuración desde tu portal Web y rellenar abajo
set rustdesk_cfg="configstring"

REM ############################### Por favor no edites debajo de esta línea #########################################

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 Mostrar el valor de la variable ID
echo ID RustDesk: %rustdesk_id%

REM Mostrar el valor de la variable contraseña
echo Contraseña: %rustdesk_pw%
echo ...............................................
```

## MSI

También puedes usar msi en lugar de `rustdesk.exe --silent-install`.

https://rustdesk.com/docs/en/client/windows/msi/


## macOS Bash

```sh
#!/bin/bash

# Asignar el valor de contraseña aleatoria a la variable contraseña
rustdesk_pw=$(openssl rand -hex 4)

# Obtener tu cadena de configuración desde tu portal Web y rellenar abajo
rustdesk_cfg="configstring"

################################## Por favor no edites debajo de esta línea #########################################

# Solicitud de contraseña de root para elevación de privilegios
[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

# Especificar el punto de montaje para el DMG (directorio temporal)
mount_point="/Volumes/RustDesk"

# Descargar el archivo rustdesk.dmg
echo "Descargando RustDesk ahora"

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

# Montar el archivo DMG en el punto de montaje especificado
hdiutil attach "$dmg_file" -mountpoint "$mount_point" &> /dev/null

# Verificar si el montaje fue exitoso
if [ $? -eq 0 ]; then
    # Mover el contenido del DMG montado a la carpeta /Applications
    cp -R "$mount_point/RustDesk.app" "/Applications/" &> /dev/null

    # Desmontar el archivo DMG
    hdiutil detach "$mount_point" &> /dev/null
else
    echo "Error al montar el DMG de RustDesk. Instalación abortada."
    exit 1
fi

# Ejecutar el comando rustdesk con --get-id y almacenar la salida en la variable rustdesk_id
cd /Applications/RustDesk.app/Contents/MacOS/
rustdesk_id=$(./RustDesk --get-id)

# Aplicar nueva contraseña a RustDesk
./RustDesk --server &
/Applications/RustDesk.app/Contents/MacOS/RustDesk --password $rustdesk_pw &> /dev/null

/Applications/RustDesk.app/Contents/MacOS/RustDesk --config $rustdesk_cfg

# Matar todos los procesos llamados RustDesk
rdpid=$(pgrep RustDesk)
kill $rdpid &> /dev/null

echo "..............................................."
# Verificar si rustdesk_id no está vacío
if [ -n "$rustdesk_id" ]; then
    echo "ID RustDesk: $rustdesk_id"
else
    echo "Error al obtener el ID de RustDesk."
fi

# Mostrar el valor de la variable contraseña
echo "Contraseña: $rustdesk_pw"
echo "..............................................."

echo "Por favor completa la instalación en GUI, lanzando RustDesk ahora."
open -n /Applications/RustDesk.app
```

## Linux

```sh
#!/bin/bash

# Asignar un valor aleatorio a la variable contraseña
rustdesk_pw=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)

# Obtener tu cadena de configuración desde tu portal Web y rellenar abajo
rustdesk_cfg="configstring"

################################## Por favor no edites debajo de esta línea #########################################

# Verificar si el script se está ejecutando como root
if [[ $EUID -ne 0 ]]; then
    echo "Este script debe ejecutarse como root."
    exit 1
fi

# Identificar OS
if [ -f /etc/os-release ]; then
    # freedesktop.org y systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID

    UPSTREAM_ID=${ID_LIKE,,}

    # Recurrir a ID_LIKE si ID no 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
    # Para algunas versiones de Debian/Ubuntu sin el comando lsb_release
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Debian más antiguo, Ubuntu, etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSE-release ]; then
    # SuSE más antiguo etc.
    OS=SuSE
    VER=$(cat /etc/SuSE-release)
elif [ -f /etc/redhat-release ]; then
    # Red Hat más antiguo, CentOS, etc.
    OS=RedHat
    VER=$(cat /etc/redhat-release)
else
    # Recurrir a uname, ej. "Linux <version>", también funciona para BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

# Instalar RustDesk

echo "Instalando 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 no soportado"
    # aquí podrías preguntar al usuario por permiso para intentar instalar de todos modos
    # si dicen sí, entonces hacer la instalación
    # si dicen no, salir del script
    exit 1
fi

# Ejecutar el comando rustdesk con --get-id y almacenar la salida en la variable rustdesk_id
rustdesk_id=$(rustdesk --get-id)

# Aplicar nueva contraseña a RustDesk
rustdesk --password $rustdesk_pw &> /dev/null

rustdesk --config $rustdesk_cfg

systemctl restart rustdesk

echo "..............................................."
# Verificar si rustdesk_id no está vacío
if [ -n "$rustdesk_id" ]; then
    echo "ID RustDesk: $rustdesk_id"
else
    echo "Error al obtener el ID de RustDesk."
fi

# Mostrar el valor de la variable contraseña
echo "Contraseña: $rustdesk_pw"
echo "..............................................."
```

## Despliegue explícito para nuevos dispositivos

De forma predeterminada, un cliente RustDesk se registra en el servidor autoalojado cuando se conecta al servidor por primera vez. En el modo normal no se requiere ningún paso adicional de despliegue.

Si habilita **Configuración → Otros → Requerir despliegue para nuevos dispositivos** en la consola web del servidor, los nuevos dispositivos deben desplegarse explícitamente antes de poder registrarse en este servidor.

Cree un [token de API](/docs/en/self-host/rustdesk-server-pro/console/#api-token) desde la consola web del servidor con una cuenta de administrador. El token debe tener el permiso **Dispositivos** configurado como **Lectura y escritura**. A continuación, ejecute el comando de despliegue en cada nuevo dispositivo de escritorio después de instalar RustDesk y configurarlo para usar su servidor autoalojado.

### Windows, macOS y Linux

En Windows, ejecute Símbolo del sistema o PowerShell como administrador:

```bat
rustdesk --deploy --token <api_token>
```

En macOS y Linux, ejecute el comando con `sudo`:

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

### ID personalizada opcional

Para desplegar el dispositivo con un ID de RustDesk específico, agregue `--id <custom_id>`:

```sh
rustdesk --deploy --token <api_token> --id <custom_id>
```

Si el ID ya lo usa otra máquina, el despliegue falla y RustDesk informa que el ID ya está en uso.

### Android

Android no usa el flujo de despliegue por línea de comandos. Cuando el servidor requiere despliegue y el cliente Android aún no se ha desplegado, RustDesk muestra una solicitud **Deploy**. Toque **OK**, introduzca el token de API en el diálogo de despliegue y, opcionalmente, introduzca una ID personalizada. También puede abrir el mismo diálogo manualmente desde **Configuración → Deploy**.

Después de que el despliegue se realice correctamente, el dispositivo se añade a la lista de dispositivos del servidor y el cliente puede registrarse normalmente.
