Guide complet de script : Automatiser la configuration de ScreenConnect et la création d’URL sur Linux

Points à retenir

  • L’automatisation améliore l’efficacité: Le script automatise la récupération et l’organisation des URL des sessions ScreenConnect, ce qui améliore considérablement l’efficacité de la gestion de l’assistance à distance.
  • Personnalisable pour différents environnements: La flexibilité des paramètres tels que l’ID d’instance et le domaine permet de répondre aux différents types de configuration de ScreenConnect.
  • Réduit les tâches manuelles et les erreurs: L’automatisation de la génération d’URL minimise la saisie manuelle, ce qui réduit le risque d’erreurs et permet de gagner du temps.
  • Prise en compte de plusieurs instances: Le script identifie et signale les conflits d’URL potentiels dans les environnements comportant plusieurs instances ScreenConnect.
  • La sécurité est primordiale: Bien que le script soit efficace, il est essentiel de maintenir les bonnes pratiques de sécurité dans l’environnement où il est utilisé.
  • Intégration avec NinjaOne: L’intégration de ces scripts dans des plateformes telles que NinjaOne permet de simplifier et optimiser considérablement les processus de gestion à distance.

L’automatisation de la gestion informatique change la donne, en simplifiant les processus et en améliorant l’efficacité. Les scripts qui simplifient les tâches complexes en sont un bon exemple. Dans ce contexte, nous nous penchons sur un script conçu pour l’application ConnectWise ScreenConnect sur les systèmes Linux. Son rôle dans la gestion efficace des sessions d’assistance à distance en fait un atout précieux pour les professionnels de l’informatique et les fournisseurs de services gérés (MSP). 

Contexte

ConnectWise ScreenConnect est un outil d’assistance à distance populaire, largement utilisé par les équipes informatiques et les entreprises MSP pour sa fiabilité et sa facilité d’utilisation. Ce script répond en particulier à la nécessité de récupérer automatiquement les URL de lancement de ScreenConnect et de les stocker dans un champ personnalisé. Il est conçu pour les environnements où un accès rapide et organisé à plusieurs sessions à distance est crucial.

Le script :

#!/usr/bin/env bash
#
# Description: Retrieves the ConnectWise ScreenConnect launch URL and saves it to a custom field (defaults to screenconnectURL). Requires the domain used for ScreenConnect and a Session Group the machine is a part of to successfully build the URL.
# By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
# Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
# Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
# Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
# Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
# Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
# Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
# EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
#
# Preset Parameter: --instanceId "ReplaceMeWithYourInstanceId"
#   The Instance ID for your instance of ScreenConnect. Used to differentiate between multiple installed ScreenConnect instances.
#   To get the instance ID, you can see it in the program name, e.g., connectwisecontrol-yourinstanceidhere.
#   It's also available in the ScreenConnect Admin Center (Administration > Advanced > Server Information).
#
# Preset Parameter: --screenconnectDomain "replace.me"
#   The domain used for your ScreenConnect instance.
#
# Preset Parameter: --sessionGroup "ReplaceMe"
#   A session group that contains all your machines (defaults to All Machines).
#
# Preset Parameter: --customField "ReplaceMeWithAnyMultilineCustomField"
#   The custom field you would like to store this information in.
#
# Preset Parameter: --help
#   Displays some help text.


# These are all our preset parameter defaults. You can set these = to something if you would prefer the script defaults to a certain parameter value.
_arg_instanceId=
_arg_screenconnectdomain=
_arg_sessiongroup="All Machines"
_arg_customfield="screenconnectURL"
_fieldValue=

# Help text function for when invalid input is encountered
print_help() {
    printf '\n\n%s\n\n' 'Usage: [--instanceId|-i <arg>] [--screenconnectDomain|-d <arg>] [--sessionGroup|-g <arg>] [--customField|-c <arg>] [--help|-h]'
    printf '%s\n' 'Preset Parameter: --instanceid "ReplaceWithYourInstanceID"'
    printf '\t%s\n' "Replace the text encased in quotes with your instance id. You can see the instance id in the ScreenConnect Admin Center (Administration > Advanced > Server Information). It's also usually present in the application name on already installed instance. e.g., connectwisecontrol-yourinstanceid."
    printf '\n%s\n' 'Preset Parameter: --screenconnectDomain "replace.me"'
    printf '\t%s' "Replace the text encased in quotes with the domain used for ConnectWise ScreenConnect. e.g. 'example.screenconnect.com'"
    printf '\n%s\n' 'Preset Parameter: --sessionGroup "Replace Me"'
    printf '\t%s' "Replace the text encased in quotes with the name of a Session Group that contains all of your machines e.g., 'All Machines'"
    printf '\n%s\n' 'Preset Parameter: --customField "replaceMe"'
    printf '\t%s' "Replace the text encased in quotes with the name of a custom field you'd like to store this information to (defaults to screenconnectUrl). E.g. 'screenconnectUrl'"
    printf '\n%s\n' 'Preset Parameter: --help'
    printf '\t%s\n' "Displays this help menu."
}

# Determines whether or not help text is necessary and routes the output to stderr
die() {
    local _ret="${2:-1}"
    echo "$1" >&2
    test "${_PRINT_HELP:-no}" = yes && print_help >&2
    exit "${_ret}"
}

# Grabbing the parameters and parsing through them.
parse_commandline() {
    while test $# -gt 0; do
        _key="$1"
        case "$_key" in
        --screenconnectdomain | --screenconnectDomain | --domain | -d)
            test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
            _arg_screenconnectdomain=$2
            shift
            ;;
        --screenconnectdomain=*)
            _arg_screenconnectdomain="${_key##--screenconnectdomain=}"
            ;;
        --instanceId | --instanceid | -i)
            test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
            _arg_instanceId=$2
            shift
            ;;
        --instanceid=*)
            _arg_instanceId="${_key##--instanceid=}"
            ;;
        --sessionGroup | --sessiongroup | -g)
            test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
            _arg_sessiongroup=$2
            shift
            ;;
        --sessiongroup=*)
            _arg_sessiongroup="${_key##--sessiongroup=}"
            ;;
        --customField | --customfield | -c)
            test $# -lt 2 && die "Missing value for the optional argument '$_key'." 1
            _arg_customfield=$2
            shift
            ;;
        --customfield=*)
            _arg_customfield="${_key##--customfield=}"
            ;;
        --help | -h)
            _PRINT_HELP=yes die 0
            ;;
        *)
            _PRINT_HELP=yes die "FATAL ERROR: Got an unexpected argument '$1'" 1
            ;;
        esac
        shift
    done
}

# Function to set a custom field
setCustomField() {
    echo "$_fieldValue" | /opt/NinjaRMMAgent/programdata/ninjarmm-cli set --stdin "$_arg_customfield"
}

export PATH=$PATH:/usr/sbin:/usr/bin

parse_commandline "$@"

# If script form is used, override command-line arguments
if [[ -n $screenconnectDomain ]]; then
    _arg_screenconnectdomain="$screenconnectDomain"
fi

if [[ -n $sessionGroup ]]; then
    _arg_sessiongroup="$sessionGroup"
fi

if [[ -n $instanceId ]]; then
    _arg_instanceId="$instanceId"
fi

if [[ -n $customFieldName ]]; then
    _arg_customfield="$customFieldName"
fi

# If we weren't given an instance id we should warn that this is not advised.
if [[ -z $_arg_instanceId ]]; then
    echo "WARNING: Without the instance id we will be unable to tell which ScreenConnect instance is yours (if multiple are installed). This could result in the wrong URL being displayed."
    echo "To get the instance id you can find it in ScreenConnect itself (Admin > Advanced > Server Information > Instance Identifier Fingerprint). It's also in the application name on every installed copy 'connectwisecontrol-yourinstanceidhere'"
fi

# --screenconnectDomain and --sessionGroup are required. We should also escape the session group given.
if [[ -z $_arg_screenconnectdomain || -z $_arg_sessiongroup ]]; then
    _PRINT_HELP=yes die "FATAL ERROR: Unable to build the URL without the Domain and Session Group!" 1
else
    _arg_sessiongroup=$(python3 -c "import urllib.parse;print(urllib.parse.quote('$_arg_sessiongroup'))")
fi

# Double check ScreenConnect is installed
installedPkg=$(ls /opt | grep "connectwisecontrol-$_arg_instanceId")
if [[ -z $installedPkg ]]; then
    _PRINT_HELP=no die "FATAL ERROR: It appears ConnectWise ScreenConnect is not installed!" 1
fi

# Lets start building some urls
for pkg in $installedPkg; do
    file="/opt/$pkg/ClientLaunchParameters.txt"
    id=$(grep -Eo 's=.{8}-.{4}-.{4}-.{4}-.{12}' "$file" | sed 's/s=//g' | sed 's/&e=Access//g')
    instanceid=${pkg//"connectwisecontrol-"/}
    # We shouldn't have multiple results but if we do we should warn the technician
    if [[ -n "$launchurls" ]]; then
        echo "WARNING: Multiple installed instances detected and no instance id was given. One of these urls will be incorrect."
        launchurls=$(
            printf '%s\n' "$launchurls"
            printf '%s\t' "$instanceid"
            printf '%s\n' "https://$_arg_screenconnectdomain/Host#Access/$_arg_sessiongroup//$id/Join"
        )
    else
        launchurls=$(
            printf '%s\t\t' "InstanceID"
            printf '%s\n' "LaunchURL"
            printf '%s\t' "$instanceid"
            printf '%s\t' "https://$_arg_screenconnectdomain/Host#Access/$_arg_sessiongroup//$id/Join"
        )
    fi
done

# Check that we were successful
if [[ -n $launchurls ]]; then
    echo "Launch URL(s) Created"
else
    _PRINT_HELP=no die "FATAL ERROR: Failed to create Launch URL(s)!" 1
fi

# Change how we output the results based on how many urls we received.
if [[ $(echo "$launchurls" | wc -l) -gt 2 ]]; then
    _fieldValue="$launchurls"
    echo "$_fieldValue"
else
    _fieldValue=$(echo "$launchurls" | tail -n 1 | awk '{print $2}')
    echo "$_fieldValue"
fi

echo "Setting Custom Field..."
setCustomField
exit 0

 

Accédez à plus de 700 scripts dans le Dojo NinjaOne

Obtenir l’accès

Description détaillée

Le script commence par définir des valeurs par défaut pour divers paramètres tels que l’identifiant de l’instance, le domaine, le groupe de session et le champ personnalisé. Ces paramètres sont essentiels car ils déterminent la manière dont le script interagira avec l’environnement ScreenConnect. La fonction parse_commandline interprète les arguments de la ligne de commande, ce qui permet aux utilisateurs de spécifier les détails de ScreenConnect.

Le script vérifie notamment la présence du paquet ScreenConnect dans le système. En cas d’absence, il interrompt l’exécution, ce qui garantit la fiabilité. Il construit ensuite l’URL nécessaire pour lancer une session ScreenConnect en fonction des paramètres fournis. Cette étape est cruciale car elle permet de traduire les données de l’utilisateur en URL exploitables.

En cas d’instances ScreenConnect multiples, le script avertit intelligemment des conflits d’URL potentiels. Cette fonction améliore la connaissance de l’utilisateur et réduit les erreurs dans les environnements multi-instances.

Enfin, le script affiche les URL construites ou les enregistre dans le champ personnalisé spécifié, ce qui permet d’y accéder facilement en cas d’utilisation ultérieure.

Cas d’utilisation potentiels

Imaginez une entreprise MSP chargée de gérer l’infrastructure informatique de plusieurs sites clients. Elle utilise ScreenConnect pour l’assistance à distance, mais se heurte à la gestion de plusieurs URL de session. En utilisant ce script, elle peut rapidement générer et stocker ces URL, ce qui permet des temps de réponse plus rapides et une assistance à distance mieux organisée.

Comparaisons

Les méthodes traditionnelles de gestion des sessions ScreenConnect impliquent souvent la récupération et l’organisation manuelles des URL, ce qui prend du temps et est source d’erreurs. Ce script automatise le processus, ce qui le rend plus efficace et plus précis. Il se distingue des méthodes manuelles par une approche systématique qui réduit la probabilité d’erreurs et permet de gagner un temps précieux.

FAQ

  • Le script est-il adaptable à différents environnements ?
    • Oui, il permet des paramètres personnalisés tels que l’ID, le domaine, etc., ce qui le rend adaptable à diverses configurations.
  • Peut-il gérer plusieurs instances ScreenConnect ?
    • Le script signale les conflits d’URL potentiels dans les configurations multi-instances, ce qui permet une vérification manuelle.
  • L’utilisation de ce script est-elle sûre ?
    • Le script lui-même ne compromet pas la sécurité, mais il garantit que l’environnement dans lequel il est exécuté est sûr.

Implications

Bien que ce script simplifie la gestion des URL, les utilisateurs doivent être conscients des implications en matière de sécurité. Il est essentiel de veiller à ce que les URL soient stockées et accessibles en toute sécurité afin d’empêcher tout accès non autorisé aux sessions à distance.

Recommandations

  • Vérifiez toujours les paramètres avant l’exécution.
  • Mettez régulièrement à jour les versions les plus récentes du script et de ScreenConnect.
  • Suivez les bonnes pratiques de sécurité dans votre environnement pour protéger les URL des sessions à distance.

Conclusion :

L’intégration de tels scripts dans la plateforme NinjaOne peut considérablement améliorer son efficacité. En automatisant des tâches telles que la récupération d’URL pour les sessions à distance, les utilisateurs de NinjaOne peuvent se concentrer davantage sur les activités stratégiques de gestion informatique, ce qui fait de la plateforme un outil encore plus utile pour les professionnels de l’informatique et les entreprises MSP.

Pour aller plus loin

Créer une équipe informatique efficace et performante nécessite une solution centralisée qui soit l’outil principal pour fournir vos services. NinjaOne permet aux équipes informatiques de surveiller, gérer, sécuriser et prendre en charge tous les appareils, où qu’ils soient, sans avoir besoin d’une infrastructure complexe sur site.

Pour en savoir plus sur NinjaOne Endpoint Management, participez à une visite guidée ou commencez votre essai gratuit de la plateforme NinjaOne.

Catégories :

Vous pourriez aussi aimer

Voir la démo×
×

Voir NinjaOne en action !

En soumettant ce formulaire, j'accepte la politique de confidentialité de NinjaOne.

Termes et conditions NinjaOne

En cliquant sur le bouton « J’accepte » ci-dessous, vous indiquez que vous acceptez les termes juridiques suivants ainsi que nos conditions d’utilisation:

  • Droits de propriété: NinjaOne possède et continuera de posséder tous les droits, titres et intérêts relatifs au script (y compris les droits d’auteur). NinjaOne vous accorde une licence limitée pour l’utilisation du script conformément à ces conditions légales.
  • Limitation de l’utilisation: Les scripts ne peuvent être utilisés qu’à des fins personnelles ou professionnelles internes légitimes et ne peuvent être partagés avec d’autres entités.
  • Interdiction de publication: Vous n’êtes en aucun cas autorisé à publier le script dans une bibliothèque de scripts appartenant à, ou sous le contrôle d’un autre fournisseur de logiciels.
  • Clause de non-responsabilité: Le texte est fourni « tel quel » et « tel que disponible », sans garantie d’aucune sorte. NinjaOne ne promet ni ne garantit que le script sera exempt de défauts ou qu’il répondra à vos besoins ou attentes particulières.
  • Acceptation des risques: L’utilisation du script est sous votre propre responsabilité. Vous reconnaissez qu’il existe certains risques inhérents à l’utilisation du script, et vous comprenez et assumez chacun de ces risques.
  • Renonciation et exonération de responsabilité: Vous ne tiendrez pas NinjaOne pour responsable des conséquences négatives ou involontaires résultant de votre utilisation du script, et vous renoncez à tout droit ou recours légal ou équitable que vous pourriez avoir contre NinjaOne en rapport avec votre utilisation du script.
  • EULA: Si vous êtes un client de NinjaOne, votre utilisation du script est soumise au contrat de licence d’utilisateur final qui vous est applicable (End User License Agreement (EULA)).