Pagina 1 di 1

[RISOLTO] Proposta di script per RustDesk

Pubblicato: 8 agosto 2024 - 11:11
di jlatieule
Buongiorno,


In sostituzione di TeamViewer, utilizziamo un server RustDesk accessibile solo alle nostre postazioni di lavoro. È un relay privato.
Per installare un relay privato, hai un ottimo script di installazione e aggiornamento su https://github.com/techahold/rustdeskinstall
Devo aggiornare tutti i client alla nuova versione.
A questo scopo ho creato il seguente pacchetto (vedi codice alla fine del messaggio)... l'installazione avviene tramite il formato EXE: rustdesk-1.2.7-x86_64.exe

Dopo l'installazione, modifico due opzioni prima di riavviare il servizio.
Questa sezione non è per niente ottimizzata e ho commentato cosa manca
Tuttavia, poiché RustDesk lo gestisce bene (molteplici scenari di test), per ora mi fermerò qui

Mancano i file update_package, uninstall e audit

Denis o Simon, potreste prenderne possesso e aggiungerlo allo store in modo che possa essere riutilizzato da altri?
Immagino che sarai più a tuo agio di me nel finalizzare la sezione "opzioni" in modo più ordinato e nel gestire update_package (ho indicato l'URL da interrogare)

Grazie in anticipo

Codice: Seleziona tutto

# -*- coding: utf-8 -*-
from setuphelpers import *
import time, string, secrets

r"""
Usable WAPT package functions: install(), uninstall(), session_setup(), audit(), update_package()

"""
# Declaring global variables - Warnings: 1) WAPT context is only available in package functions; 2) Global variables are not persistent between calls

# Création d'un mot de passe aléatoire
alphabet = string.ascii_letters + string.digits
rustdesk_pw = ''.join(secrets.choice(alphabet) for i in range(12))

# Configuration réseau pour RustDesk à importer
# Si vide ou invalide, la configuration réseau restera inchangée
rustdesk_cfg = "METTEZ-VOTRE-CONFIG-ENTRE-LES-GUILLEMETS"

def install():
    # Récupération de l'exécutable
    bin_name = glob.glob("rustdesk-*.exe")[0]

    # Désactivé car pas de détection de fin d'installation
##    install_exe_if_needed(
##        bin_name,
##        silentflags="--silent-install",
##        key="RustDesk",
##        min_version=control.get_software_version(),
##    )
    # Méthode manuelle
    # Si n'est pas installé ou version est inférieure à celle du paquet
    if ( not installed_softwares ('rustdesk') or
    Version(installed_softwares('rustdesk')[0]["version"]) < Version(control['version'].split('-',1)[0]) ):
        print("Installation de %s %s" % ( control['name'], control['version'].split('-',1)[0] ) )
        # Timeout pour sortir sans erreur... ajouter une pause de 10s si on n'utilise plus cette méthode
        run_notfatal( '%s --silent-install' % (bin_name), timeout=15 )
    else:
        print("%s %s est déjà installé" % ( control['name'], control['version'].split('-',1)[0] ) )

    # Récupération du dossier d'installation
    software = installed_softwares ('rustdesk')
    install_location = software[0]["install_location"]

    # Exécution ou installation du service
    if service_installed ("rustdesk"):
        if not service_is_running ("rustdesk"):
            print ('Démarrage du service')
            service_start('rustdesk')
    else:
        print ("Installation du service RustDesk")
        run_notfatal( '"%s\\rustdesk.exe" --install-service -wait -Verbose' % (install_location), timeout = 20 )

    print("Patientez quelques secondes avant que l'installation se poursuive")
    time.sleep(10)

    print("Application de la configuration réseau")
    run_notfatal( '"%s\\rustdesk.exe" --config %s' % (install_location, rustdesk_cfg) )
    print("Définition d'un mot de passe permanent aléatoire")
    run( '"%s\\rustdesk.exe" --password %s' % (install_location, rustdesk_pw) )
    # ID de RustDesk
    rustdesk_id = run_notfatal( '"%s\\rustdesk.exe" --get-id' % (install_location) )

    # Arrêt du service Rustdesk pour modifications des options
    if service_installed("rustdesk"):
        if service_is_running("rustdesk"):
            print("Arrêt du service Rustdesk")
            service_stop("rustdesk")

    # Ajout d'option personnalisé à la configuration
    # inifile_writestring ne peut pas être utiliser suite à mauvaise en-tête dans le fichier
    # En cas de ligne en doublon dans le fichier RustDesk2.toml, les dernières seront prise en compte... mais pas toujours !!!
    # Point d'amélioration :
        # Supprimer les fichier %appdata%\RustDesk\config de tous les profile
        # Chercher et remplacer les chaînes concernée
        # Si absent, créer les chaînes au lieu de le faire systématiquement
    toml = makepath("c:", "Windows", "ServiceProfiles", "LocalService", "AppData", "Roaming", "RustDesk", "config", "RustDesk2.toml")
    f = open( toml, 'a')
    f.write("\n" + "direct-server = 'Y'")
    f.write("\n" + "direct-access-port = '21118'")
    f.close

    # Redémarrage du service Rustdesk
    if service_installed("rustdesk"):
        if service_is_stopped("rustdesk"):
            print("Démarrage du service RustDesk")
            service_start("rustdesk")
    else:
        print ("Installation du service RustDesk")
        run_notfatal( '"%s\\rustdesk.exe" --install-service -wait -Verbose' % (install_location), timeout = 20 )

    # Retour sur la console de l'ID et du mot de passe permanent
    print ( "-------------------" )
    print ( "ID RustDesk : %s" % rustdesk_id )
    print ( "Mot de passe : %s" % rustdesk_pw )
    print ( "-------------------" )



def session_setup():
    # Créer le session_setup



def update_package():
    # Créer l'update package
    # curl latest sur https://www.github.com//rustdesk/rustdesk/releases/latest
    # fichier lastest avec $RDLATEST sur https://github.com/rustdesk/rustdesk/releases/download/$RDLATEST/rustdesk-$RDLATEST-x86_64.exe



def uninstall():
    # Créer l'uninstall



def audit():
    # Créer l'audit
    # Vérifier si service fonctionne
    # Vérifier configuration dans makepath("c:", "Windows", "ServiceProfiles", "LocalService", "AppData", "Roaming", "RustDesk", "config", "RustDesk2.toml")



Re: Proposta di script per RustDesk

Pubblicato: 14 agosto 2024 - 09:34
di rmaurisso
Ciao,
grazie @jlatieule per questo script.
Quando si utilizzano strumenti esterni in wapt, è possibile usare "rustdesk_id" come argomento? Questo semplificherebbe la connessione al computer selezionato (come farebbe TightVNC).
Grazie.

Re: Proposta di script per RustDesk

Pubblicato: 14 agosto 2024 - 20:50
di jlatieule
Al momento non so come recuperare l'ID visualizzato nei log di installazione per inserirlo in wapt.

Di default, ho abilitato l'accesso tramite indirizzo IP. Funziona perfettamente con strumenti wapt esterni.

P.S.: Promemoria GDPR: nessuna connessione senza il consenso dell'utente. La password permanente disponibile nei log serve solo per la manutenzione del sistema quando nessun utente è connesso.

Re: Proposta di script per RustDesk

Pubblicato: 22 agosto 2024 - 18:05
di sfontenau
Ciao @jlatieule,

grazie per il tuo suggerimento.

Ho iniziato a lavorare su RustDesk.

Ci sono tre pacchetti:

tis-rustdesk-server (per installare il server RustDesk su Linux o Windows)

, tis-rustdesk (per installare l'agente RustDesk su Linux, Windows o Mac senza configurazione)

e tis-rustdesk-config-template (configura l'agente RustDesk; richiede l'esecuzione di un pacchetto di aggiornamento per fornire la configurazione).

La password casuale viene trasmessa in forma crittografata.

Valuteremo l'aggiunta di una piccola integrazione nativa al menu contestuale (clic destro) per semplificarne l'utilizzo. ;)

Re: Proposta di script per RustDesk

Pubblicato: 22 agosto 2024 - 18:44
di jlatieule
Ottimo, Simon! Sono molto curioso di vedere la parte server. Abbiamo dovuto fare delle ricerche per ottimizzare l'installazione su Debian.

Quando torno dalle vacanze, posso inviarti la procedura di installazione del server; magari troverai qualche spunto utile per configurarlo... fammi sapere quale metodo di comunicazione preferisci.

PS: Quando lavoravo come tecnico informatico alla scuola media Victor Hugo di Narbonne, contribuivo al forum con lo pseudonimo di "percherie". Immagino che ti ricordi di me e, come allora, credo sinceramente che la condivisione sia fondamentale per il progresso della comunità.

Re: Proposta di script per RustDesk

Pubblicato: 23 agosto 2024 - 09:57
di sfontenau
jlatieule ha scritto: 22 agosto 2024 - 18:44 PS: Quando ero specialista ICT presso la scuola media Victor Hugo di Narbonne, contribuivo al forum con lo pseudonimo percherie. Immagino che vi ricordiate di me e, come allora, credo sinceramente nella condivisione per far progredire la collettività.
Certo che mi ricordo ;)Se mai vi trovate a Nantes, venite a trovarci, mi farebbe molto piacere (non vado spesso a Narbonne) :D )
jlatieule ha scritto: 22 agosto 2024 - 18:44 Sono molto curioso di vedere il lato server. Abbiamo dovuto fare delle ricerche per ottimizzare l'installazione su Debian.
Niente di straordinario, ho solo riprodotto lo script Python che si trova nella loro documentazione e qui: https://github.com/techahold/rustdeskin ... install.sh

E per il server Windows, ho appena sostituito nssm con angelizzare

E per quanto riguarda il client Rustdesk per Mac, non è stato un granché nei miei test, probabilmente dovremo tornarci sopra.

Re: Proposta di script per RustDesk

Pubblicato: 5 settembre 2024 - 16:10
di rmaurisso
Ciao,
grazie a entrambi.
Funziona bene sia per gli strumenti esterni con l'indirizzo IP che per il template. ;)

Re: Proposta di script per RustDesk

Pubblicato: 9 settembre 2024 - 15:46
di dcardon
Ciao Régis,

grazie per il feedback. :-) Contrassegno la discussione come risolta.

Cordiali saluti,

Denis