---
title: Despliegue de Cliente
weight: 400
pre: "2.4. "
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"]
---
## 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
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/(?.*)/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 ", 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 > 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 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
```
En macOS y Linux, ejecute el comando con `sudo`:
```sh
sudo rustdesk --deploy --token
```
### ID personalizada opcional
Para desplegar el dispositivo con un ID de RustDesk específico, agregue `--id `:
```sh
rustdesk --deploy --token --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.