Skip to content

Instantly share code, notes, and snippets.

@ThinGuy
Created August 21, 2025 17:09
Show Gist options
  • Select an option

  • Save ThinGuy/21818e7e4ef1e1ffd5d94bdbf6299777 to your computer and use it in GitHub Desktop.

Select an option

Save ThinGuy/21818e7e4ef1e1ffd5d94bdbf6299777 to your computer and use it in GitHub Desktop.
Meshcommander Setup for Canonical Orangeboxes (run on node00)
#!/bin/bash
# Meshcommander (AMT Management) for Orangeboxes
sudo apt update
sudo apt install nodejs npm -fqy --auto-remove --purge;
sudo mkdir -p /srv/mc;
sudo chown -R $(id -un 1000):$(id -gn 1000) /srv/mc
sudo find /srv/mc -type d -exec chmod u+rwx,g+rwx,o+rx {} \; -o -type f -exec chmod u+rw,g+rw,o+r {} \;
(cd /srv/mc && npm install meshcommander);
cat <<-MESHCMDR |sed -r 's/[ \t]+$//g'|sudo tee 1>/dev/null /etc/systemd/system/meshcommander.service
[Unit]
Description=Open source Intel® AMT management console
Documentation=https://meshcentral.com/info/extra/mdtk/MeshCommanderUserGuide.pdf
After=network.target
[Service]
Environment=NODE_PORT=3000
Type=simple
User=$(id -un 1000)
ExecStart=/usr/bin/node /srv/mc/node_modules/meshcommander/meshcommander.js --any
Restart=on-failure
[Install]
WantedBy=multi-user.target
MESHCMDR
sudo systemctl daemon-reload
sudo systemctl enable meshcommander.service
sudo systemctl start meshcommander.service
sudo systemctl status meshcommander.service
# Fetch meshcmd
[[ $(dpkg --print-architecture) = amd64 ]] && { sudo wget -qO /usr/local/bin/meshcmd https://meshcentral.com/executables/meshcmd-linux-x86-64; }
[[ $(dpkg --print-architecture) = arm64 ]] && { sudo wget -qO /usr/local/bin/meshcmd https://meshcentral.com/executables/meshcmd-linux-arm-64; }
sudo chmod +x /usr/local/bin/meshcmd
mc-computer-list() {
[[ ${@} =~ -q ]] && { local Q="1>/dev/null"; } || { local Q=""; }
local OB_NUM="${HOSTNAME//[A-Za-z.]}"
(printf "{\n \x22webappversion\x22: \x220.9.5\x22,\n \x22computers\x22: [\n"
for Y in {10..20};do
local NN=$(printf '%02d\n' $((${Y}-10)))
[[ ${Y} -eq 10 && $(command 2>/dev/null -v meshcmd) ]] && { local NI=$(sudo meshcmd amtinfo 2>/dev/null|awk '/^Wired/{gsub(/\r/,"",$NF);print $5}'); } || { local NI="172.27.$((10#${OB_NUM})).${Y}"; };
printf " {\n \x22name\x22: \x22amtnode${NN}ob${OB_NUM}\x22,\n \x22host\x22: \x22${NI}\x22,\n \x22tags\x22: \x22OrangeBox${OB_NUM},ob${OB_NUM},amtnode${NN},node${NN}ob${OB_NUM}\x22,\n \x22user\x22: \x22admin\x22,\n \x22pass\x22: \x22Password1+\x22,\n \x22tls\x22: 0\n }"
[[ ${Y} = 20 ]] && { printf "\n"; } || { printf ",\n"; }
done;
printf -- ' ]\n}\n')|tee ~/meshcommander-ob${OB_NUM}.json ${Q}
printf "\n\n\e[0;38;2;0;255;0mSuccess\x21\e[0m Computer list for Meshcommand located @ ~/meshcommander-ob${OB_NUM}.json\n\n\n";
};export -f mc-computer-list
# Create a json list to import into meshcommander
mc-computer-list
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment