Bulk paste hosts
Paste a list of user@host:port lines from any source —
a CSV column, a Notion page, an Ansible inventory snippet, the
output of a grep on your fleet — and Noxen enrols
every parseable line as a host.
Open the paste form
+ menu in the sidebar → Bulk paste… A multi-line text area opens. Paste your list, hit Parse, review what was recognised, then Enrol.
Supported line formats
The parser (HostListParser) accepts any of:
paul@10.0.1.42
paul@10.0.1.42:22
paul@nuc.lan
paul@nuc.lan:2222
admin@plex.home.arpa:22
root@[2001:db8::1]
root@[2001:db8::1]:22
nuc.lan # implies user from System Preferences
10.0.1.42:2222 # implies user from System Preferences
One host per line. Whitespace is stripped. Lines starting with
# are treated as comments and ignored, so you can
paste annotated CSV content directly. Blank lines are ignored.
Parser rules
- Username
- The portion before
@. If the line has no@, the parser falls back to your macOS short username fromNSUserName(). - Hostname
- Everything between
@(or start of line) and:(or end of line). For IPv6, the host portion must be wrapped in square brackets so the colons inside the address aren't misread as port separators —root@[2001:db8::1]:22. - Port
- The portion after the final
:outside any bracket pair. Defaults to 22 when omitted. Must be an integer in1–65535; out-of-range or non-numeric values flag the line as invalid. - Display name
- The hostname becomes the display name on enrol. You can rename hosts later by clicking the name in the sidebar.
Validation pass
Parse previews what was recognised before any host is created. Each line is shown as a row in a table:
- Green check — parsed cleanly, ready to enrol.
- Yellow warning — parsed but with caveats (e.g., port outside the standard 22, hostname looks like an internal-only DNS name). Still enrollable; the warning is just a heads-up.
- Red X — couldn't parse. The error column explains why ("port out of range", "invalid IPv6 syntax", "empty hostname"). Edit the source list, paste again.
Identity selection
Bulk paste doesn't ask for an identity per line — instead, you pick one default key for the whole batch. Suitable when the same key works against every host in the list (the typical fleet pattern). For mixed-key fleets, paste in groups and pick a different key per batch.
The chosen key is copied into the macOS Keychain under the Noxen app group and applied to every enrolled host. Same Keychain path as manual add and SSH config import — see Privacy & data for storage details.
Common sources
Quick conversions from common inventory formats:
# From an Ansible inventory.ini section:
[homelab]
nuc ansible_host=10.0.1.42 ansible_user=paul ansible_port=22
plex ansible_host=plex.lan ansible_user=admin
# Convert to bulk-paste format with awk:
awk '/ansible_host=/ {
h=""; u=""; p=22;
for (i=1; i<=NF; i++) {
if ($i ~ /^ansible_host=/) { sub(/.*=/,"",$i); h=$i }
if ($i ~ /^ansible_user=/) { sub(/.*=/,"",$i); u=$i }
if ($i ~ /^ansible_port=/) { sub(/.*=/,"",$i); p=$i }
}
if (h) print u "@" h ":" p
}' inventory.ini
Limits
The parser handles up to ~10,000 lines without hitting any artificial limit, but the host cap still applies — the free tier accepts 3, Noxen 1.x and Maintenance 25, Live Feed 100, and MSP 500. Pasting more lines than your tier allows shows them all in the preview but only the first N are enrollable. See pricing for tier limits and how the cap is enforced.