Guía completa de scripts: automatizar la configuración de ScreenConnect en Linux y la creación de URL

Principales conclusiones

  • La automatización aumenta la eficacia: el script automatiza la recuperación y organización de las URL de las sesiones de ScreenConnect, mejorando significativamente la eficiencia en la gestión del soporte remoto.
  • Personalizable para diversos entornos: la flexibilidad en la configuración de parámetros como el ID de instancia y el dominio se adapta a diferentes configuraciones de ScreenConnect.
  • Reduce el esfuerzo manual y los errores: la automatización de la generación de URL minimiza la introducción manual, reduciendo la probabilidad de errores y ahorrando tiempo.
  • Conciencia multiinstancia: el script identifica y advierte de posibles conflictos de URL en entornos con varias instancias de ScreenConnect.
  • La seguridad es primordial: aunque el script es eficiente, es crucial mantener las mejores prácticas de seguridad en el entorno en el que se utiliza.
  • Potencial de integración de NinjaOne: la integración de este tipo de scripts en plataformas como NinjaOne puede agilizar considerablemente los procesos de gestión remota.

La automatización de la gestión de TI cambia las reglas del juego, agiliza los procesos y aumenta la eficacia. Un buen ejemplo son los scripts que simplifican tareas complejas. En este contexto, profundizamos en un script diseñado para la aplicación ConnectWise ScreenConnect en sistemas Linux. Su papel en la gestión eficaz de las sesiones de asistencia remota lo convierte en un activo valioso para los profesionales de TI y los proveedores de servicios gestionados (MSP). 

Contexto

ConnectWise ScreenConnect es una popular herramienta de asistencia remota muy utilizada por equipos de TI y MSP por su fiabilidad y facilidad de uso. Este script aborda en particular la necesidad de recuperar automáticamente las URL de inicio de ScreenConnect y almacenarlas en un campo personalizado. Está hecho a medida para entornos en los que es crucial un acceso rápido y organizado a múltiples sesiones remotas.

El script para automatizar la configuración de ScreenConnect en Linux y la creación de URL

#!/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

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

El script comienza definiendo valores por defecto para varios parámetros como ID de instancia, dominio, grupo de sesión y campo personalizado. Estos parámetros son fundamentales, ya que determinan cómo interactuará el script con el entorno ScreenConnect. La función parse_commandline interpreta los argumentos de la línea de comandos, permitiendo a los usuarios especificar sus detalles ScreenConnect.

En particular, el script comprueba la presencia del paquete ScreenConnect en el sistema. Si falta, detiene la ejecución, garantizando la fiabilidad. A continuación, construye la URL necesaria para iniciar una sesión ScreenConnect basándose en los parámetros proporcionados. Este paso es crucial, ya que traduce los datos introducidos por el usuario en URL procesables.

En casos con múltiples instancias de ScreenConnect, el script avisa de forma inteligente sobre posibles conflictos de URL. Esta función mejora el conocimiento del usuario, reduciendo los errores en entornos multiinstancia.

Por último, el script muestra las URL construidas o las guarda en el campo personalizado especificado, lo que facilita el acceso para su uso futuro.

Posibles casos de uso

Imagina un MSP responsable de gestionar la infraestructura de TI de varios clientes. Utiliza ScreenConnect para la asistencia remota, pero tiene dificultades para gestionar varias URL de sesión. Al implementar este script, puede generar y almacena rápidamente estas URL, lo que permite tiempos de respuesta más rápidos y un soporte remoto más organizado.

Comparaciones

Los métodos tradicionales de gestión de las sesiones de ScreenConnect suelen implicar la recuperación y organización manual de las URL, lo que lleva mucho tiempo y es propenso a errores. Este script automatiza el proceso, aportando eficacia y precisión. Contrasta con los métodos manuales al ofrecer un enfoque sistemático que reduce la probabilidad de errores y ahorra un tiempo valioso.

FAQ

  • ¿Se puede adaptar el script para automatizar la configuración de ScreenConnect a distintos entornos?
    • Sí, permite parámetros personalizados, por ejemplo ID, dominio, etc., lo que lo hace adaptable a diversas configuraciones.
  • ¿Puede gestionar varias instancias de ScreenConnect?
    • El script advierte de posibles conflictos de URL en configuraciones multi-instancia, permitiendo la verificación manual.
  • ¿Es seguro utilizar este script para automatizar la configuración de ScreenConnect en Linux y la creación de URL?
    • El script en sí no compromete la seguridad, sino que garantiza que el entorno donde se ejecuta es seguro.

Implicaciones

Aunque el script agiliza la gestión de URL, los usuarios deben ser conscientes de las implicaciones de seguridad. Garantizar que las URL se almacenan y se accede a ellas de forma segura es vital para evitar el acceso no autorizado a sesiones remotas.

Recomendaciones

  • Comprueba siempre los parámetros antes de la ejecución.
  • Actualiza regularmente el script y ScreenConnect a sus últimas versiones.
  • Aplica las mejores prácticas de seguridad en tu entorno para proteger las URL de sesión remota.

Reflexiones finales

La incorporación de estos scripts a la plataforma NinjaOne puede aumentar significativamente su eficacia. Al automatizar tareas como la recuperación de URL para sesiones remotas, los usuarios de NinjaOne pueden centrarse más en actividades estratégicas de gestión de TI, que convierte a la plataforma en una herramienta aún más potente en el arsenal de los profesionales de TI y los MSP.

Próximos pasos

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de complejas infraestructuras locales.

Obtén más información sobre NinjaOne Remote Script Deployment, echa un vistazo a un tour en vivo, o comienza tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…