Skip to content

Bulk Import Servers

Use a JSON file to add several servers in one import. Each array item describes one server, including its connection method and optional grouping or startup settings.

[
{
"name": "My Server",
"ssh": {
"ip": "example.com",
"port": 22,
"user": "root",
"pubKeyId": ""
},
"tags": ["production"],
"autoConnect": false
}
]

SSH settings belong in the ssh object. This nested layout is used by the App’s exports and by the import dialog example.

Imports also accept older files with fields such as ip, port, and user at the top level, including files imported from ~/.ssh/config. New exports use the nested layout above.

Field Required Description
name Yes Server name shown in the App
ssh No SSH configuration; omit for a server configured only through Monitor HTTP
monitorHttp No Monitor configuration: addr, user, pwd, certSha256, allowInsecure
preferredTransport No Which transport leads when both SSH and Monitor HTTP are configured: ssh or monitorHttp. SSH leads when omitted
tags No Tags used to group servers
autoConnect No Connect automatically when the App starts
custom No Per-server extras such as preferTempDev and logoUrl
pve No Proxmox VE configuration; see below
wolCfg No Wake-on-LAN configuration
envs No Environment variables for the SSH terminal only
customSystemType No Skip automatic system-type detection
disabledCmdTypes No Status commands to skip on this server
id No Stable server ID; omitted or empty values are generated during import

The following fields belong inside ssh:

Field Required Description
ip Yes Domain name or IP address
port Yes SSH port, usually 22
user Yes SSH username
pwd No Password; not recommended, use an SSH key instead
fileTransport No Which protocol carries files: sftp or scp. Defaults to sftp; use scp for a host with no SFTP subsystem
pubKeyId No ID of a private key stored in the App, not a PEM file path
keyPath No Desktop-only private-key path produced by a ~/.ssh/config import; read from disk when connecting
identityAgent No The ssh-agent whose keys are offered, as IdentityAgent names one: SSH_AUTH_SOCK or a socket path; on Windows a named pipe, and SSH_AUTH_SOCK with the variable unset is \\.\pipe\openssh-ssh-agent. Omitted, no agent is used. Linux, Windows and macOS
forwardAgent No Forward identityAgent to the server’s sessions, as ForwardAgent yes; whoever is root there can sign with its keys while connected. Defaults to false
alterUrl No Fallback address in the form user@ip:port
jumpIds No Jump-server chain specified by server ID
controlPath No Where an OpenSSH master connection to this server listens, as ControlPath names it. A server using this one as a jump is reached through that master when it is running. Linux and macOS
proxyCommand No ProxyCommand; on a phone it runs in the built-in Linux environment. Mutually exclusive with jumpIds

The following fields belong inside pve:

Field Required Description
addr Yes PVE web address, for example https://127.0.0.1:8006; the host is resolved on the server’s side of the connection
auth No token or password. Defaults to password
tokenId For token API token ID in the form user@realm!tokenid
tokenSecret For token The token’s secret; a credential, so treat the file as one
pwd No For password: the PVE password of the SSH user in the pam realm. Omit it to reuse the SSH password
certSha256 No SHA-256 of the certificate to trust, lowercase hex. Omit it to confirm the certificate on the first connection

Older exports put pveAddr, pveIgnoreCert, and pvePwd inside custom; imports ignore them. Move them into a pve object to keep PVE.

A server needs at least one connection method. If both ssh and monitorHttp are omitted, the imported record cannot connect to a host.

allowInsecure defaults to false. Set it only if you intend this Monitor connection to use plaintext HTTP, including when the address is a private non-loopback IP. The Monitor separately enforces its own allow_insecure setting for sensitive endpoints.

  1. Create a JSON array containing the server records.
  2. Open Settings → Backup → Import → Server.
  3. Select the JSON file.
  4. Check the displayed server count and confirm the import.
  5. Remove the import file and any copies as soon as the import finishes.
[
{
"name": "Production",
"ssh": {
"ip": "prod.example.com",
"port": 22,
"user": "admin",
"pubKeyId": "my-key"
},
"tags": ["production", "web"]
},
{
"name": "Development",
"ssh": {
"ip": "dev.example.com",
"port": 2222,
"user": "dev",
"pubKeyId": "dev-key"
},
"tags": ["development"]
},
{
"name": "Behind NAT",
"monitorHttp": {
"addr": "https://10.0.0.5:3770",
"user": "admin"
},
"tags": ["monitor"]
}
]

After importing, test each connection and confirm that the expected tags and transport settings appear on the server records.