mirror of
https://github.com/rustdesk/doc.rustdesk.com.git
synced 2026-07-14 10:44:22 +00:00
d0ea7a5a6f
Signed-off-by: 21pages <sunboeasy@gmail.com>
422 lines
15 KiB
Markdown
422 lines
15 KiB
Markdown
---
|
|
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 > 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 <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.
|