On source I run:
I get:
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):
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.
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
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: