Déploiement Client

La méthode la plus simple est d’utiliser un client personnalisé, https://twitter.com/rustdesk/status/1788905463678951787.

Vous pouvez déployer en utilisant plusieurs méthodes, dont certaines sont couvertes dans Configuration Client.

Alternativement, vous pouvez utiliser des scripts de déploiement de masse avec votre RMM, Intune, etc. L’ID et le mot de passe sont sortis par le script. Vous devriez collecter cela ou le diviser en différents scripts pour collecter l’ID et le mot de passe.

Le mot de passe permanent peut être changé d’aléatoire à celui que vous préférez en modifiant le contenu entre () après rustdesk_pw vers votre mot de passe préféré pour PowerShell et la ligne correspondante pour toute autre plateforme.

PowerShell

$ErrorActionPreference= 'silentlycontinue'

# Assigner la valeur du mot de passe aléatoire à la variable mot de passe
$rustdesk_pw=(-join ((65..90) + (97..122) | Get-Random -Count 12 | % {[char]$_}))

# Obtenez votre chaîne de config depuis votre portail Web et remplissez ci-dessous
$rustdesk_cfg="configstring"

################################## Veuillez ne pas modifier en dessous de cette ligne #########################################

# Exécuter en tant qu'administrateur et rester dans le répertoire courant
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;
    }
}

# Cette fonction retournera la dernière version et le lien de téléchargement comme un objet
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)
    }

    # Lien d'exemple actuel : 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

    # correction de bug - parfois vous devez remplacer "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 "ERREUR : Version ou lien de téléchargement non trouvé."
        Exit
    }

    # Créer un objet à retourner
    $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 est la version la plus récente."
    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 "Installation du service"
    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 "..............................................."
# Afficher la valeur de la variable ID
Write-Output "ID RustDesk : $rustdesk_id"

# Afficher la valeur de la variable mot de passe
Write-Output "Mot de passe : $rustdesk_pw"
Write-Output "..............................................."

Windows batch/cmd

@echo off

REM Assigner la valeur du mot de passe aléatoire à la variable mot de passe
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 Obtenez votre chaîne de config depuis votre portail Web et remplissez ci-dessous
set rustdesk_cfg="configstring"

REM ############################### Veuillez ne pas modifier en dessous de cette ligne #########################################

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 Afficher la valeur de la variable ID
echo ID RustDesk : %rustdesk_id%

REM Afficher la valeur de la variable mot de passe
echo Mot de passe : %rustdesk_pw%
echo ...............................................

MSI

Vous pouvez aussi utiliser msi au lieu de rustdesk.exe --silent-install.

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

Winget

vous pouvez déployer via powershell avec winget également (cela s’installe via la version Microsoft d’apt - partie des installations Windows les plus récentes)

depuis une fenêtre powershell ou via un script (par exemple via GPO)

winget install --id=RustDesk.RustDesk  -e

macOS Bash

#!/bin/bash

# Assigner la valeur du mot de passe aléatoire à la variable mot de passe
rustdesk_pw=$(openssl rand -hex 4)

# Obtenez votre chaîne de config depuis votre portail Web et remplissez ci-dessous
rustdesk_cfg="configstring"

################################## Veuillez ne pas modifier en dessous de cette ligne #########################################

# Demande de mot de passe root pour l'élévation de privilège
[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"

# Spécifier le point de montage pour le DMG (répertoire temporaire)
mount_point="/Volumes/RustDesk"

# Télécharger le fichier rustdesk.dmg
echo "Téléchargement de RustDesk maintenant"

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

# Monter le fichier DMG au point de montage spécifié
hdiutil attach "$dmg_file" -mountpoint "$mount_point" &> /dev/null

# Vérifier si le montage a réussi
if [ $? -eq 0 ]; then
    # Déplacer le contenu du DMG monté vers le dossier /Applications
    cp -R "$mount_point/RustDesk.app" "/Applications/" &> /dev/null

    # Démonter le fichier DMG
    hdiutil detach "$mount_point" &> /dev/null
else
    echo "Échec du montage du DMG RustDesk. Installation abandonnée."
    exit 1
fi

# Exécuter la commande rustdesk avec --get-id et stocker la sortie dans la variable rustdesk_id
cd /Applications/RustDesk.app/Contents/MacOS/
rustdesk_id=$(./RustDesk --get-id)

# Appliquer le nouveau mot de passe à RustDesk
./RustDesk --server &
/Applications/RustDesk.app/Contents/MacOS/RustDesk --password $rustdesk_pw &> /dev/null

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

# Tuer tous les processus nommés RustDesk
rdpid=$(pgrep RustDesk)
kill $rdpid &> /dev/null

echo "..............................................."
# Vérifier si rustdesk_id n'est pas vide
if [ -n "$rustdesk_id" ]; then
    echo "ID RustDesk : $rustdesk_id"
else
    echo "Échec de l'obtention de l'ID RustDesk."
fi

# Afficher la valeur de la variable mot de passe
echo "Mot de passe : $rustdesk_pw"
echo "..............................................."

echo "Veuillez terminer l'installation sur GUI, lancement de RustDesk maintenant."
open -n /Applications/RustDesk.app

Linux

#!/bin/bash

# Assigner une valeur aléatoire à la variable mot de passe
rustdesk_pw=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1)

# Obtenez votre chaîne de config depuis votre portail Web et remplissez ci-dessous
rustdesk_cfg="configstring"

################################## Veuillez ne pas modifier en dessous de cette ligne #########################################

# Vérifier si le script est exécuté en tant que root
if [[ $EUID -ne 0 ]]; then
    echo "Ce script doit être exécuté en tant que root."
    exit 1
fi

# Identifier l'OS
if [ -f /etc/os-release ]; then
    # freedesktop.org et systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID

    UPSTREAM_ID=${ID_LIKE,,}

    # Retomber sur ID_LIKE si ID n'était pas 'ubuntu' ou '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
    # Pour certaines versions de Debian/Ubuntu sans la commande lsb_release
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Debian plus ancien, Ubuntu, etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSE-release ]; then
    # SuSE plus ancien etc.
    OS=SuSE
    VER=$(cat /etc/SuSE-release)
elif [ -f /etc/redhat-release ]; then
    # Red Hat plus ancien, CentOS, etc.
    OS=RedHat
    VER=$(cat /etc/redhat-release)
else
    # Retomber sur uname, par exemple "Linux <version>", fonctionne aussi pour BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

# Installer RustDesk

echo "Installation de 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 supporté"
    # ici vous pourriez demander à l'utilisateur la permission d'essayer d'installer quand même
    # s'il dit oui, alors faire l'installation
    # s'il dit non, quitter le script
    exit 1
fi

# Exécuter la commande rustdesk avec --get-id et stocker la sortie dans la variable rustdesk_id
rustdesk_id=$(rustdesk --get-id)

# Appliquer le nouveau mot de passe à RustDesk
rustdesk --password $rustdesk_pw &> /dev/null

rustdesk --config $rustdesk_cfg

systemctl restart rustdesk

echo "..............................................."
# Vérifier si rustdesk_id n'est pas vide
if [ -n "$rustdesk_id" ]; then
    echo "ID RustDesk : $rustdesk_id"
else
    echo "Échec de l'obtention de l'ID RustDesk."
fi

# Afficher la valeur de la variable mot de passe
echo "Mot de passe : $rustdesk_pw"
echo "..............................................."