Uploaded image for project: 'Guacamole'
  1. Guacamole
  2. GUACAMOLE-1919

Add option to call external scripts before/after connections are passed to guacd.

    XMLWordPrintableJSON

Details

    • Wish
    • Status: Open
    • Minor
    • Resolution: Unresolved
    • None
    • None
    • guacamole
    • None

    Description

      The simple version of the idea is to be able to call an external script or process before and after a connection is made in order to automate any number of external systems in concert with the connection.

      • An 'External Scripts' section in the connection editor
        • 'Script Before' field to provide path to script/program
        • 'Script After' field to provide path to script/program
        • All script fields should have:
          • Numeric field to specify timeout for the script in seconds.
          • Checkbox to indicate if gauacmole should block until script returns / timesout.
        • + button to dynamically add multiple scripts called for both before / after options - each script should have blocking/secure checkboxes. If multiple scripts are configured it would be nice to run them in parallel if that's possible.
      • Metadata.
        • For calling scripts the following details should be passed
          • Connection details including any expanded from placeholders
          • Include password value if option enabled.
        • Option: Scripts could return string values to guacamole and display message to connecting user.
      • Function
        • 'Before' scripts should be run after user clicks the connection link but before guacd is called.
        • 'After' scripts should be run once guacd returns on connection closure. (When user is prompted for Home, Reconnect, Logout)
        • Script runtime should be limited to a 'timeout' period to prevent runaway scripts. If not defined by admin in connection then a default value should exist that can be overridden system wide in guacamole.preferences. 
        • If blocking selected for script:
          • If script times out connection should fail.
          • If script returns false connection should fail.
          • Any failure condition should be displayed to the user.
        • Ideally any script should be able to be used and the system would use the #! to determine interpreter, however if this is not possible then allow for the full interpreter path with parameter to location of script to call...

      I see this as being a swiss army knife for many different integration options.

      • Sending notifications to any messaging platform when users connect to notify on connections opened / closed outside of the system being connected to.
      • Script could send approval request to system owner via Ntfy, Slack, Teams, SMS etc. If owner accepts connection continues, if not the connection fails and message from owner is displayed to requestor. (Requires calling script to be able to return values to guac)
      • DIY VDI to quickly spin up desktop containers or linked clone VMs on demand using ANY container / virtualization environment.
      • DIY VDI If using VM pools, could checkout a running VM from pool and depending on pool remaining capacity spin up additional VM. Then on closing connection evaluation on pool capacity could destroy / suspend / poweroff endpoints.
      • Create a new tunneled port through a bastion host / launch VPN tunnel / etc. to reach a secured remote system.
      • Allow connections only during specified days / time of day.
      • VDI service provider - be able to limit customer to specific number of connections - OR - even a resource limit of CPU/RAM/Disk and each VDI spawned / closed dynamically allocates / releases capacity from their resource pool.

      Anything you could script could be extended to, this could be quite powerful.

      Attachments

        Activity

          People

            Unassigned Unassigned
            meyeaard Aaron Meyer
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated: