vultr-cli works as your user but 401s under sudo
Fixes vultr-cli working as your user but failing with 401 under sudo or as another user. Use when the same commands authenticate fine unprivileged but not elevated. The cause is the CLI config living in the invoking user's home (~/.vultr-cli.yaml), which root does not read. The fix is passing the key via env var under sudo. Not for invalid keys.
sudo switches to root's home, where your CLI config does not exist. Pass the key through explicitly: sudo VULTR_API_KEY [your value] vultr-cli ..., or stop using sudo for API calls (it is not needed). The key is fine; root just cannot see your config file.
$ vultr-cli account get # works
$ sudo vultr-cli account get
{"error": "Invalid API key", "status": 401}Fix
- Confirm the split: run the same command with and without sudo and compare.
Pass the key through sudo's environment:
sudo VULTR_API_KEY [your value] vultr-cli account getExpected: works, same as unprivileged.
- Better: drop sudo entirely for API calls. vultr-cli talks to a remote API; it never needs root.
- If some wrapper truly requires root, configure root's own CLI config once (
sudo -i, then set up the key there).
When this applies
- Commands work as your user, 401 as root or another user.
- Cron/systemd jobs running as a different user than the one that configured the CLI.
When it does NOT apply
- 401 as your own user too: the key itself is bad.
- 403s: permissions or user-level API gating.
Compatibility
- vultr-cli on Linux/macOS with per-user config files.
Why it happens
Config resolution is per-UID: ~/.vultr-cli.yaml expands against the invoking user's home. sudo (without -E and env preservation rules) gives the process root's home, so the CLI finds no key and 401s. Nothing about the key changed; the file lookup did.
Edge cases
sudo -Epreserves the environment but many sudoers configs strip custom vars; explicitVAR=value sudois more reliable.- Systemd units: put the key in the unit's
Environment=or anEnvironmentFile=readable by the service user. - Docker: bake nothing; pass
-e VULTR_API_KEYat run time.