Proxmox migration error

Jul 6, 2024
25
2
3
On source I run:
Code:
qm remote-migrate 101 101 'host=1.2.3.4,apitoken=root@pam!migrate=RANDOM-STRING,fingerprint=....:07:5F:CD:6A:36:E7:C5:.....' --target-bridge vmbr0 --target-storage local --online
I get:
Code:
2026-01-27 14:29:19 remote: started tunnel worker
tunnel: Error: server didn't upgrade: 401 Unauthorized
CMD websocket tunnel died: command 'proxmox-websocket-tunnel' failed: exit code 1

2026-01-27 14:29:22 tunnel still running - terminating now with SIGTERM
2026-01-27 14:29:23 ERROR: migration aborted (duration 00:00:04): can't open tunnel - malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "(end of string)") at /usr/share/perl5/PVE/Tunnel.pm line 312.

On source it ended on destination I see the qmtunnel started in the proxmox dashboad.

Environment:
- Source: pve-manager 9.1.2, kernel 6.17.2-1-pve
- Target: pve-manager 9.1.4, kernel 6.17.4-2-pve
- Not clustered (remote-migrate between standalone nodes)

What I've verified:
- API token works for regular API calls (tested with curl)
- Token has privsep=0 (no privilege separation)
- Network connectivity OK (ping, curl to :8006 works)
- MTU not the issue (tested with lower MTU)

Target logs (pvedaemon):
Code:
<root@pam!migrate> starting task ... qmtunnel:101:root@pam!migrate:
Failed to accept tunnel connection - got timeout

Target logs (pveproxy):
Nothing logged about websocket upgrade attempt.

The tunnel worker starts successfully on target, but the websocket upgrade from source gets 401. The initial API authentication works (tunnel starts), but the subsequent websocket connection fails authentication.

Offline migration works - only online (live) migration fails.
 
Last edited:
Your log tells you that you couldn't connect to the remote host 401 Unauthorized. Looking at your command again, the API token is not supplied correctly, it should be: host=1.2.3.4,apitoken=PVEAPIToken=root@pam!migrate=RANDOM-STRING,fingerprint=...

The section for remote-migrate in man qm(1) gives an example with the correct usage.