amidaware / tacticalrmm Goto Github PK
View Code? Open in Web Editor NEWA remote monitoring & management tool, built with Django, Vue and Go.
Home Page: https://docs.tacticalrmm.com
License: Other
A remote monitoring & management tool, built with Django, Vue and Go.
Home Page: https://docs.tacticalrmm.com
License: Other
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.
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'
The following does not work when running in docker since meshcentral is running in it's own container and the api doesn't have access to it, therefore remote desktop, terminal and file browser are not working.
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
It would be good if,
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
Scripts and folders sorted alphabetically
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.
I'm sure I'm missing the obvious. How do we go about adding a new user for the RMM?
Is that a CLI process?
Can't sign in stuck on add site but can't pick timezone?
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!
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.
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.
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
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?
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.
The Procedure entry point GetActiveProcessCount could not be loaded in the dynamic link library KERNEL32.dll
System is
Microsoft Corporation, Windows Server (R) 2008 Standard (6.0.6002) (en-US)
Hi,
If possible could it be added so we can set a sender address on a customer basis? Looking to send them from the same domain just different emails so our ticketing system can differentiate per customer.
Thanks,
Daniel
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
Having a issue with the latest update.sh
did the following steps:
su - tactical
wget https://raw.githubusercontent.com/wh1te909/tacticalrmm/develop/update.sh
chmod +x update.sh
./update.sh
I saw a huge amount of permission errors and it did not update properly. I should run as tactical (user I created during install), correct?
that's how I did the previous update and it did work correctly.
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.
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.
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
}
}`
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?
Would be nice to able to make the agent list window longer (adjusting between the agent details and the agent list).
Would it be possible to add patch management settings to the policy manager?
use mongodb for meshcentral in docker in order to support more than a few hundred agents.
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
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.
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.
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.
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.
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.
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.
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?
Under my test machine it lists a network adaptor I dont care about, it would be great if it listed all attached network adaptors
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.
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)
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#
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
I would love the ability to add an event id of * or all or something of the sort so that I can add a check for all error's in each of the event log categories, thank you!
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!
Please delete accidental duplicate
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.
User administration should include check to not directly allow disabling of your own account.
It would be awesome if we could right click on an agent and have a run script option added to the menu. Right now I have to add it as a task. But if it's a one time thing, it would be easier that way.
Have customers who still have 32 bit machines, can we please have a 32 bit rmm agent.
can the agent be run on my pc without a popup or something
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
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?
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
}
}`
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?
Changing the meshcentral username leads to full meshcentral view instead of only eg. remoteconsole in iframes
Not a big deal, but would be nice to be able to sort the location within a client. Either alpha or manual if possible?
Thanks!
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!
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.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.