GithubHelp home page GithubHelp logo

amidaware / tacticalrmm Goto Github PK

View Code? Open in Web Editor NEW
2.8K 77.0 400.0 83.5 MB

A remote monitoring & management tool, built with Django, Vue and Go.

Home Page: https://docs.tacticalrmm.com

License: Other

Python 92.96% Shell 6.38% Go 0.30% PowerShell 0.11% Dockerfile 0.05% Jinja 0.19%
django vue monitoring python remote-control remote-desktop remote-admin-tool remote-administration-tool rmm django-rest-framework

tacticalrmm's Introduction

Tactical RMM

CI Tests codecov Code style: black

Tactical RMM is a remote monitoring & management tool, built with Django and Vue.
It uses an agent written in golang and integrates with MeshCentral

Demo database resets every hour. A lot of features are disabled for obvious reasons due to the nature of this app.

Features

  • Teamviewer-like remote desktop control
  • Real-time remote shell
  • Remote file browser (download and upload files)
  • Remote command and script execution (batch, powershell, python, nushell and deno scripts)
  • Event log viewer
  • Services management
  • Windows patch management
  • Automated checks with email/SMS alerting (cpu, disk, memory, services, scripts, event logs)
  • Automated task runner (run scripts on a schedule)
  • Remote software installation via chocolatey
  • Software and hardware inventory

Windows agent versions supported

  • Windows 7, 8.1, 10, 11, Server 2008R2, 2012R2, 2016, 2019, 2022

Linux agent versions supported

  • Any distro with systemd which includes but is not limited to: Debian (10, 11), Ubuntu x86_64 (18.04, 20.04, 22.04), Synology 7, centos, freepbx and more!

Mac agent versions supported

  • 64 bit Intel and Apple Silicon (M1, M2)

Installation / Backup / Restore / Usage

Refer to the documentation

tacticalrmm's People

Contributors

af7567 avatar agit8or avatar azulskyknight avatar bbrendon avatar bc24fl avatar beejayzed avatar bradhawkins85 avatar can-eh-dian11 avatar cocorocho avatar comprofix avatar conlan0 avatar d4-maertzdorf avatar davidrudduck avatar dependabot[bot] avatar dinger1986 avatar iamkhris avatar joeldeteves avatar meuchels avatar meyerje avatar niceguyit avatar omnicef avatar rfost52 avatar sadnub avatar silversword411 avatar stavros-k avatar supermanu avatar tenebor avatar tremor021 avatar unplugged216 avatar wh1te909 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tacticalrmm's Issues

Automation and Alerts overview

I was looking into ways to apply checks globally to either sites, clients, or agent level. I thought of having an Automation Manager component. Something like this added to the Settings FileBar.
image

You can add policies that include multiple checks. Then you can apply these policies at clients, sites, and agents. Similar to a GPO. The policies can be run manually, on a scheduled basis, or triggered by an external event.

I was also thinking of a way to see all active alerts. Possibly located in a notification icon by the logout menu.

Let me know your thoughts and I can work on it. I have the frontend built out mostly just need to add the routes server-side.

Checks from policy not automatically applying

I have some checks set up as a policy and have the policy applied. However they do not show up until I create a check manually and then delete the check from a device. Then the policy checks show up for only that device.

Feature Request: Policies For Servers and/or Workstations

Would it be possible to configure a policy so that it only applies to Servers or Workstations (or both)?
E.G. Disk Space check for Servers vs Workstations could be at different percentages? Or only apply a Service Check to Servers etc.

Perhaps two tick boxes, Apply To: Servers, Workstations when creating/editing a policy?

Brand new install can't login

Excited to try out your project. I have a brand new install, it had some errors during the installation (which I copied down the entire process terminal output). The login comes up, but my username and password fail to work (I put them in lastpass immediately on creating them), so I know I have them accurate.

A bit stuck on where things went wrong, thanks.

Feature Request: Failed Logons

Hi,

I know we can already check the log for event ID's so we can check for failed logon ID's. However it's not really customizable in the sense of 100 failed logon's in 24 hours would trigger the alert. Could this be added?

Thanks for all your work!

SMTP Settings require email as username

Under Global Settings, when I try to configure the SMTP settings... the username field requires an email address. I am attempting to use MailJet as my SMTP relay and the username is not an email address. So I cannot save the settings as it tells me invalid email.

Feature question: Is there a simple online/offline check w/ email?

I see where I can add PING checks, but I don't know if that will work to internal machines (my RMM is not on the same network).

What I really want is an alert via email if a machine fails to check in, stops reporting or goes offline for certain machines.

Did I miss where to set this?

Thanks!

error when generating exe

When you go to Add Agent then choose Generate and Download EXE you get an error Golang build failed. Check debug log for the error message.

Information not populating

The Local IP, Software, Patches and Assets pages don't populate with any data.
Are there any logs to show why that I can provide?

Feature Request: All Clients Server and Workstation Policy

Can the All Clients section be enabled to assign policies.

I currently have a check that runs and renames the Add/Remove Programs entry to My Company RMM Agent instead of the default as customers were querying the new software that was showing up on their PC, it would be good to be able to assign this check to All Clients once and just know it's doing its thing.

Code for anyone else wanting it:
`$NewAgentName = "My Company RMM Agent"

$AgentName = (Get-ItemProperty "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall{0D34D278-5FAF-4159-A4A0-4E2D2C08139D}_is1").DisplayName
if ($AgentName -eq "Tactical RMM Agent") {
Set-ItemProperty -Name DisplayName -Path "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall{0D34D278-5FAF-4159-A4A0-4E2D2C08139D}_is1" -Value $NewAgentName
$AgentName = (Get-ItemProperty "HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall{0D34D278-5FAF-4159-A4A0-4E2D2C08139D}_is1").DisplayName
if ($AgentName -ne $NewAgentName) {
exit 1
} else {
exit 0
}
}`

Feature Request: patch managment in automation manager

It would be great to set a patch policy across clients or sites, I was thinking adding this in to policy manager makes the most sense

PS I hope Im not to anoying with feature requests because I am sure I will be able to come up with a bunch more
also Im trying to learn django and python just so I can help with this project, this project is awesome!

Feature Request: Script Arguments

Related to Feature Request #47 it would be great to be able to pass variables to scripts at runtime when either selecting Run Now or having them execute on a schedule.

Internationalization support

Hello, I gave a quick glance at the code and saw hardcoded strings, would you consider translation support?

Thanks for all this amazing work and making it open.

Let'S Encrypt Error - Cannot issue for "*.com.au"

On a fresh Ubuntu 20.04 install I get the following error when running install.sh

Obtaining a new certificate
An unexpected error occurred:
The server will not issue certificates for the identifier :: Error creating new order :: Cannot issue for "*.com.au": Domain name is a wildcard for an ICANN TLD
Please see the logfiles in /var/log/letsencrypt for more details.

The install appears to calculate the rootdomain correctly from rmm.mydomain.com.au

I managed to get the install running by doing the following to the install.sh script
Removing:
rootdomain=$(expr match "$rmmdomain" '..(...*)')

And Adding:
while [[ $rootdomain != [.][.]* ]]
do
echo -ne "${YELLOW}Enter the root domain for LetsEncrypt (e.g. example.com)${NC}: "
read rootdomain
done

Bug: iOS issues while clicking on any agent

On the current iOS (both phone and iPad) on built in safari and chrome
I can log in, get the 2fa, view the dashboard. once I click on an agent, screen flashes, and it errors out:

Your session has expired
Login

Software Chocolatey hardcoded versions

Example:

When installing Citrix Workspace Tacticalrmm shows old version and redirects to a newer version on Chocolatey.
The install command is Command line: "C:\ProgramData\Chocolatey\choco.exe" install citrix-workspace --version 19.11.0.50 --no-progress --yes

Wat is the version number in TacticalRMM but not in Chocolatey. Is there a way to update the repository?

Bug: Checks Disappear After Adding Task

I have a policy setup called Default Checks in Automation Manager

which has the basic CPU, Disk, Ping checks set up, when I added and event log check then a task linked to the failure of the check all the checks disappeared as did the task.

Automation Manager

The new check has been applied to one site and is returning data however it has not applied to all sites where the policy is configured, but will show if I re-add the policy to the client/site.

Checks Applied By Policy

I have checked Django administration but can't see anywhere that contains the info for the checks/tasks.

The debug log also only shows the new check being added to some machines but no errors as to why the checks are no longer visible in the interface.

Global settings: meshcentral

Changing the meshcentral username leads to full meshcentral view instead of only eg. remoteconsole in iframes

Policies not applying tasks

When applying a policy to a client or site checks are applied as expected however tasks do not apply.

Applying a policy directly to an agent pops up an error "Something went wrong" but nothing appears in the debug logs although the policy does apply, this also pulls down the site policy to the agent and creates the tasks.

Feature Request: Service Checks, PASS if service does not exist

Can you please add the option to have a service check Pass if the service does not exist.

This will allow the policy to apply to all machines and only alert/restart a service if it is installed on a machine and can then also kick in when if the service is installed in the future.

Feature Request: Variables

Need the ability to store variables against Clients/Sites/Devices and Globally which can then be used later in tasks and checks.
It would be good if these variables could be updated via tasks or checks too.
E.G. Store a software product key for a client such as #antiviruskey# and then can use this in script arguments like c:\windows\temp\myinstaller.exe #antiviruskey#

Skip letsencrypt when sitting behind an existing reverse proxy

I have an existing ngnix reverse proxy (with integrated letsencrypt) that serves my single public ip address that I have available to me. Is it possible to skip the letsencrypt process (perhaps using a self-signed cert or allow http)? Alternatively, can I configure it to use an alternative port (81/444, for example) so it can coexist with my existing public services?

Feature Request: Script Sorting

It would be good if,

  1. Scripts could be in "folders" as script lists will get very long over time. Perhaps when naming script something like Folder name/Folder name/Script name then you can click through "folders" when selecting a script

  2. Scripts and folders sorted alphabetically

  3. Scripts can be tagged as Checks or Tasks and only show in the appropriate sections, this will prevent tasks from being accidentally run as a check.

Feature Request: Maintenance mode

Hi,

Is it possible to get a Maintenance mode? Right clicking on the server/workstation for example them Maintenance mode which would suppress all alerts while active? Maybe a reminder every few days that the server is in maintenance mode by email so it doesn't get left permanently. They could show a different colour in the dashboard too?

Thanks!
Daniel

Assistance

Sorry to write this here but I want to help! I am
Not a programmer but run my own MSP in the UK, I would be keen if possible to help with a website and any other way I can. I can share my contact details if anyone wants.

Thanks,
Dinger1986

Feature Request: Event Log Check, Filter Source and/or Details

Would it be possible to update the Event Log check to also take the event source and/or possibly even a string in the details in to consideration when running the check.
Some event id's belong to multiple sources and can trigger false alerts if just checking for a specific event id.

E.G. Event ID 5 belongs to VDS Basic Provider, IsolatedUserMode and Hyper-V-VmSwitch and not all of these need to be alerted when detected.

Feature Request: Run Script in addition to SMS/Email alerts

Adding the ability to run scripts would allow some integration between Tactical and other apps.
EG, osTicket, there is a script that would accept variables to create a ticket when an issue occurs.

raiseticket.py --issuesummary "{HOST.NAME} - {EVENT.NAME}" --issuedetails "{HOST.NAME} {EVENT.NAME}" --email {$TICKETCONTACT}

`#!/usr/bin/python
import argparse
import requests
import json

parser = argparse.ArgumentParser(description="Raises tickets in OSTicket")
parser.add_argument('--issuesummary', required=True, help='The issue summary that will appear in osTicket', dest='summary')
parser.add_argument('--issuedetails', required=True, help='The issue detail that will appear in osTicket', dest='detail')
parser.add_argument('--email', required=True, help='The issue detail that will appear in osTicket', dest='email')
args = parser.parse_args()

url = "https://osticket.mydomain.com/api/tickets.json"
key = "apikeyhere"

data = {
"name":"Zabbix",
"email":args.email,
"phone":"0123456789",
"subject":args.summary,
"message":args.detail,
"topicId":10
}

headers = {
"X-API-Key": key
}

r = requests.post(url,data=json.dumps(data),headers=headers)
print r.text
`

In this case raiseticket.py would be located on the RMM server and executed with the appropriate variables to log the ticket against the correct user in osTicket.

This would allow anyone to build their own script for alerting etc.

For checks this could be probably handled with Checks/Tasks when variables are implemented but it would be good if it could be performed for offline servers etc too.

Bug: Newly installed agent isn't reporting

The agent is green, but when I try to run salt test.ping against it:

MAB-FS1-61:
Minion did not return. [No response]
The minions may not have all finished running and any remaining minions will return upon completion. To look up the return data for this job later, run the following command:

salt-run jobs.lookup_jid 20200903095430762989

ERROR: Minions returned with non-zero exit code
tactical@ubuntu-rtw-tactical-rmm:~$ salt-run jobs.lookup_jid 20200903095430762989
[WARNING ] Failed to open log file, do you have permission to write to /var/log/salt/master?
[WARNING ] Could not write out jid file for job 20200903095653274885. Retrying.
[WARNING ] Could not write out jid file for job 20200903095653274885. Retrying.
[WARNING ] Could not write out jid file for job 20200903095653274885. Retrying.
[WARNING ] Could not write out jid file for job 20200903095653274885. Retrying.
[WARNING ] Could not write out jid file for job 20200903095653274885. Retrying.
[ERROR ] prep_jid could not store a jid after 5 tries.
[CRITICAL] The specified 'local_cache' returner threw a stack trace:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 123, in prep_jid
with salt.utils.files.fopen(os.path.join(jid_dir, "jid"), "wb+") as fn_:
File "/usr/lib/python3/dist-packages/salt/utils/files.py", line 396, in fopen
f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage
FileNotFoundError: [Errno 2] No such file or directory: '/var/cache/salt/master/jobs/f0/28fd6b902e129207cea3115367772245620db61fb34b903ce7ebcdf9e7458d/jid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 123, in prep_jid
with salt.utils.files.fopen(os.path.join(jid_dir, "jid"), "wb+") as fn_:
File "/usr/lib/python3/dist-packages/salt/utils/files.py", line 396, in fopen
f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage
FileNotFoundError: [Errno 2] No such file or directory: '/var/cache/salt/master/jobs/f0/28fd6b902e129207cea3115367772245620db61fb34b903ce7ebcdf9e7458d/jid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 123, in prep_jid
with salt.utils.files.fopen(os.path.join(jid_dir, "jid"), "wb+") as fn_:
File "/usr/lib/python3/dist-packages/salt/utils/files.py", line 396, in fopen
f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage
FileNotFoundError: [Errno 2] No such file or directory: '/var/cache/salt/master/jobs/f0/28fd6b902e129207cea3115367772245620db61fb34b903ce7ebcdf9e7458d/jid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 123, in prep_jid
with salt.utils.files.fopen(os.path.join(jid_dir, "jid"), "wb+") as fn_:
File "/usr/lib/python3/dist-packages/salt/utils/files.py", line 396, in fopen
f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage
FileNotFoundError: [Errno 2] No such file or directory: '/var/cache/salt/master/jobs/f0/28fd6b902e129207cea3115367772245620db61fb34b903ce7ebcdf9e7458d/jid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 123, in prep_jid
with salt.utils.files.fopen(os.path.join(jid_dir, "jid"), "wb+") as fn_:
File "/usr/lib/python3/dist-packages/salt/utils/files.py", line 396, in fopen
f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage
FileNotFoundError: [Errno 2] No such file or directory: '/var/cache/salt/master/jobs/f0/28fd6b902e129207cea3115367772245620db61fb34b903ce7ebcdf9e7458d/jid'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/utils/job.py", line 75, in store_job
mminion.returners[jidstore_fstr](False, passed_jid=load["jid"])
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 131, in prep_jid
return prep_jid(
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 131, in prep_jid
return prep_jid(
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 131, in prep_jid
return prep_jid(
[Previous line repeated 2 more times]
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 104, in prep_jid
raise salt.exceptions.SaltCacheError(err)
salt.exceptions.SaltCacheError: prep_jid could not store a jid after 5 tries.
[CRITICAL] The specified 'local_cache' returner threw a stack trace:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/salt/utils/job.py", line 142, in store_job
mminion.returnersfstr
File "/usr/lib/python3/dist-packages/salt/returners/local_cache.py", line 155, in returner
os.makedirs(hn_dir)
File "/usr/lib/python3.8/os.py", line 213, in makedirs
makedirs(head, exist_ok=exist_ok)
File "/usr/lib/python3.8/os.py", line 223, in makedirs
mkdir(name, mode)
PermissionError: [Errno 13] Permission denied: '/var/cache/salt/master/jobs/f0/28fd6b902e129207cea3115367772245620db61fb34b903ce7ebcdf9e7458d'

Feature Request: Better Downloadable Installer/Script

Would it be possible to have an exe or msi generated when using Install Agent to automate the install process rather than downloading the winagent.exe then running the command with arguments.

Or, below is the PowerShell script I have written to install the agent, can there be a button added beside Show Install Command that generates the install ps1 script and fills the variables?

`$installversion = 'winagent-v0.10.1'
$api = '"https://api.example.com"'
$clientid = '1'
$siteid = '1'
$agenttype = '"server"'
$power = '0'
$rdp = '1'
$ping = '1'
$auth = '"authkey"'
$downloadlink = 'https://github.com/wh1te909/winagent/releases/download/v0.10.1/' + $installversion + '.exe'

$serviceName = 'tacticalagent'
If (Get-Service $serviceName -ErrorAction SilentlyContinue) {
write-host ('Tactical RMM Is Already Installed')
} Else {

$OutPath = $env:TMP
$output = $installversion + ".exe"

Try
{
    Invoke-WebRequest -Uri $downloadlink -OutFile $OutPath\$output
    Start-Process -FilePath $OutPath\$output -ArgumentList ('/VERYSILENT /SUPPRESSMSGBOXES && timeout /t 20 /nobreak') -Wait
    Start-Process -FilePath "C:\Program Files\TacticalAgent\tacticalrmm.exe" -ArgumentList ('-m install --api ', "$api", '--client-id', $clientid, '--site-id', $siteid, '--agent-type', "$agenttype", '--power', $power, '--rdp', $rdp, '--ping', $ping, '--auth', "$auth") -Wait -RedirectStandardOutput 'C:\Program Files\TacticalAgent\output.txt' -RedirectStandardError 'C:\Program Files\TacticalAgent\err.txt'
    exit 0
}
Catch
{
    $ErrorMessage = $_.Exception.Message
    $FailedItem = $_.Exception.ItemName
    Write-Error -Message "$ErrorMessage $FailedItem"
    exit 1
}
Finally
{
    Remove-Item -Path $OutPath\$output
}

}`

Docker Setup

Hello,
I just wanted to say that this project and the work done is awesome! I am currently splitting up the different components in docker so that I can test this myself. Would you be interested in adding the docker configuration to the repo? I can do a pull request once I get everything working.

Thanks!

Josh

Agents are showing offline after installing

Agent installs correctly, services are up and running, but it never completes reporting to the RMM and goes offline (yellow status).
Have tried restarting the services but it never changes (shows 51 years offline on the affected ones).
Computers are Windows 7. Some Windows 7 computers are working correctly (along with Windows 10)

Bug: Run patch status scan, no patches or software listed

under patches and software I have no patch / no software
I have run patch status scan,
in the debug log (from the gui/website) I have

software.tasks:get_installed_software:83 - Unable to get installed software on testPC-1

the testpc is a windows 10 VM
The other features I have tested do work on this pc
I am going to add other pcs to use for testing in my environment, will report if the other machines act different

Is there another log that I could add to help?

Feature Request: Email Task Results was Veeam Backup check

Hi,

I'm looking to set the event checker to check for veeam status logs. However it saves them into Applications and Services Logs (Under Veeam Agent) rather than Windows logs is it possible to pull event ID's from this location?

I would be looking for event 190 which denotes a successful backup.

Thanks,
Daniel

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.