Die wichtigsten Erkenntnisse
- Automatisierung steigert die Effizienz: Das Skript automatisiert den Abruf und die Organisation von ScreenConnect-Sitzungs-URLs und verbessert so die Effizienz des Remote-Support-Managements erheblich.
- Anpassbar für verschiedene Umgebungen: Die Flexibilität bei der Einstellung von Parametern wie Instanz-ID und Domäne sorgt für unterschiedliche ScreenConnect-Konfigurationen.
- Reduziert manuellen Aufwand und Fehler: Durch die Automatisierung der URL-Generierung wird die manuelle Eingabe minimiert, was die Fehlerwahrscheinlichkeit verringert und Zeit spart.
- Bewusstsein für mehrere Instanzen: Das Skript identifiziert und warnt vor möglichen URL-Konflikten in Umgebungen mit mehreren ScreenConnect-Instanzen.
- Sicherheit ist oberstes Gebot: Das Skript ist zwar effizient, aber es ist wichtig, dass in der Umgebung, in der es verwendet wird, bewährte Sicherheitsverfahren eingehalten werden.
- NinjaOne-Integrationspotenzial: Die Integration solcher Skripte in Plattformen wie NinjaOne kann die Fernverwaltungsprozesse erheblich rationalisieren.
Die Automatisierung der IT-Verwaltung ist ein entscheidender Faktor für die Rationalisierung von Prozessen und die Steigerung der Effizienz. Ein gutes Beispiel sind Skripte, die komplexe Aufgaben vereinfachen. In diesem Zusammenhang befassen wir uns mit einem Skript, das für die ConnectWise ScreenConnect-Anwendung auf Linux-Systemen entwickelt wurde. Seine Rolle bei der effizienten Verwaltung von Remote-Support-Sitzungen macht es zu einer wertvollen Bereicherung für IT-Experten und Managed Service Provider (MSPs).
Hintergrund
ConnectWise ScreenConnect ist ein beliebtes Tool für den Fernsupport, das von IT-Teams und MSPs aufgrund seiner Zuverlässigkeit und Benutzerfreundlichkeit häufig eingesetzt wird. Dieses Skript richtet sich insbesondere an die Notwendigkeit, ScreenConnect Start-URLs automatisch abzurufen und in einem benutzerdefinierten Feld zu speichern. Sie ist für Umgebungen konzipiert, in denen ein schneller, organisierter Zugriff auf mehrere Remote-Sitzungen wichtig ist.
Das Skript:
#!/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
Zugriff auf über 300 Skripte im NinjaOne Dojo
Detaillierte Aufschlüsselung
Das Skript beginnt mit der Definition von Standardwerten für verschiedene Parameter wie Instanz-ID, Domäne, Sitzungsgruppe und benutzerdefiniertes Feld. Diese Parameter sind entscheidend, da sie vorgeben, wie das Skript mit der ScreenConnect-Umgebung interagieren soll. Die Funktion parse_commandline interpretiert Befehlszeilenargumente, mit denen die Benutzer ihre ScreenConnect-Details angeben können.
Insbesondere prüft das Skript, ob das ScreenConnect-Paket im System vorhanden ist. Ist dies nicht der Fall, wird die Ausführung angehalten, um die Zuverlässigkeit zu gewährleisten. Anschließend wird die URL, die zum Starten einer ScreenConnect-Sitzung erforderlich ist, anhand der angegebenen Parameter erstellt. Dieser Schritt ist entscheidend, da er die Benutzereingaben in umsetzbare URLs übersetzt.
In Fällen mit mehreren ScreenConnect-Instanzen warnt das Skript auf intelligente Weise vor möglichen URL-Konflikten. Diese Funktion verbessert das Bewusstsein der Benutzer und reduziert Fehler in Umgebungen mit mehreren Instanzen.
Abschließend zeigt das Skript die konstruierten URLs entweder an oder speichert sie in dem angegebenen benutzerdefinierten Feld, um den Zugriff für die zukünftige Verwendung zu erleichtern.
Mögliche Anwendungsfälle
Stellen Sie sich einen MSP vor, der für die Verwaltung der IT-Infrastruktur an mehreren Kundenstandorten zuständig ist. Sie verwenden ScreenConnect für den Fernsupport, haben aber Probleme mit der Verwaltung mehrerer Sitzungs-URLs. Durch die Implementierung dieses Skripts können sie diese URLs schnell generieren und speichern, was schnellere Reaktionszeiten und einen besser organisierten Fernsupport ermöglicht.
Vergleiche
Herkömmliche Methoden zur Verwaltung von ScreenConnect-Sitzungen beinhalten oft das manuelle Abrufen und Organisieren von URLs, was zeitaufwändig und fehleranfällig ist. Dieses Skript automatisiert den Prozess und sorgt für mehr Effizienz und Genauigkeit. Im Gegensatz zu manuellen Methoden bietet es einen systematischen Ansatz, der die Fehlerwahrscheinlichkeit verringert und wertvolle Zeit spart.
FAQs
- Kann das Skript für verschiedene Umgebungen angepasst werden?
- Ja, es erlaubt benutzerdefinierte Parameter wie z. B. ID, Domäne usw., wodurch es sich an verschiedene Konfigurationen anpassen lässt.
- Kann es mehrere ScreenConnect Instanzen verwalten?
- Das Skript warnt vor potenziellen URL-Konflikten bei der Einrichtung von mehreren Instanzen und ermöglicht eine manuelle Überprüfung.
- Ist es sicher, dieses Skript zu verwenden?
- Das Skript selbst gefährdet nicht die Sicherheit, sondern stellt sicher, dass die Umgebung, in der es ausgeführt wird, sicher ist.
Auswirkungen
Das Skript vereinfacht zwar die URL-Verwaltung, aber die Benutzer sollten sich der Auswirkungen auf die Sicherheit bewusst sein. Die sichere Speicherung von URLs und der sichere Zugriff darauf sind von entscheidender Bedeutung, um den unbefugten Zugriff auf Remote-Sitzungen zu verhindern.
Empfehlungen
- Überprüfen Sie immer die Parameter vor der Ausführung.
- Aktualisieren Sie das Skript und ScreenConnect regelmäßig auf die jeweils neueste Version.
- Implementieren Sie bewährte Sicherheitspraktiken in Ihrer Umgebung, um URLs von Remote-Sitzungen zu schützen.
Abschließende Überlegungen
Die Einbindung solcher Skripte in die NinjaOne-Plattform kann deren Effizienz erheblich steigern. Durch die Automatisierung von Aufgaben wie dem URL-Abruf für Remote-Sitzungen können sich NinjaOne-Anwender stärker auf strategische IT-Management-Aktivitäten konzentrieren , was die Plattform zu einem noch leistungsfähigeren Werkzeug im Arsenal von IT-Experten und MSPs macht.