The SSH agent forwarding by anysphere.remote-containers looses connection to the host's agent after some time

Describe the Bug

In a DevContainer using anysphere.remote-containers SSH agent forwarding works fine for a while. After 15 to 20 minutes, the connection to the host’s agent gets lost and I obtain a Error connecting to agent: Connection refused when doing a ssh-add -l in the DevContainer.

I observed that the process listening to the socket in $SSH_AUTH_SOCK dies or that the counterpart in the extension host is not listening to the stdout of that process anymore.

Steps to Reproduce

Have the SSH agent running in the host system and have a key added to it. Open a DevContainer and check ssh-add -l for a while. After some time, the connection is lost.

Expected Behavior

The connection shall be kept open all the time the DevContainer is running.

Operating System

MacOS

Current Cursor Version (Menu → About Cursor → Copy)

Version: 1.2.2
VSCode Version: 1.99.3
Commit: faa03b17cce93e8a80b7d62d57f5eda6bb6ab9f0
Date: 2025-07-07T06:08:52.104Z
Electron: 34.5.1
Chromium: 132.0.6834.210
Node.js: 20.19.0
V8: 13.2.152.41-electron.0
OS: Darwin arm64 24.5.0

Does this stop you from using Cursor

No - Cursor works, but with this issue

3 Likes

Same issue here, but for me it happens within 1-2minutes consistently. I am using 1password’s ssh-agent. It used to work fine before switching to anypshere’s dev container extension today.

2025-07-10 16:17:07.531 [info] Server install command exit code: 0
2025-07-10 16:17:07.531 [info] Registering label formatter for dev-container*
2025-07-10 16:17:07.579 [info] [server install]: exit
2025-07-10 16:17:07.597 [info] Forwarding SSH agent /private/tmp/com.apple.launchd.qHDEdGOcrs/Listeners socket
2025-07-10 16:17:07.611 [info] Spawned process 22828: 'docker' 'exec' '-u' 'dannymanny' '-i' '7734731030b2d877d008755bd3b30c616bece96ba3ec7bc670424b9924a4a1e1' 'bash' '-c' '/home/dannymanny/.cursor-server/bin/3af362bc7c6ffdde67ee75328bc9be679d6f3a40/node -e "
const net = require('net');
const fs = require('fs');
process.stdin.pause();
const server = net.createServer(function (socket) {
console.error('Connection established');
socket.pipe(process.stdout);
process.stdin.pipe(socket);
});
server.listen({ path: '/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock'});
server.on('close', function (hadError) {
console.error(hadError ? 'Remote close with error' : 'Remote close');
process.exit(hadError ? 1 : 0);
});
server.on('error', function (err) {
process.stderr.write(err && (err.stack || err.message) || String(err));
});
process.stdin.on('close', function (hadError) {
console.error(hadError ? 'Remote stdin close with error' : 'Remote stdin close');
process.exit(hadError ? 1 : 0);
});
process.on('uncaughtException', function (err) {
fs.writeSync(process.stderr.fd, 'error: ' + (err.stack || err.message) + '\n');
process.exit(1);
});
"'
2025-07-10 16:17:07.613 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] created socket server in container and bound forwarder to it
2025-07-10 16:17:07.613 [info] Forwarding exec server locally via tcpForward method
2025-07-10 16:17:07.614 [info] Forwarding 127.0.0.1:38589 to 127.0.0.1:0 for container 7734731030b2d877d008755bd3b30c616bece96ba3ec7bc670424b9924a4a1e1
2025-07-10 16:17:07.614 [info] Spawned process 22829: '/Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)' '/Users/dannymanny/.cursor/extensions/anysphere.remote-containers-1.0.10/dist/scripts/forwarder.js' 'port' '7734731030b2d877d008755bd3b30c616bece96ba3ec7bc670424b9924a4a1e1' '/home/dannymanny/.cursor-server/bin/3af362bc7c6ffdde67ee75328bc9be679d6f3a40/node' 'dannymanny' '127.0.0.1:0' '127.0.0.1:38589'
2025-07-10 16:17:08.039 [info] forwarderProcess stdout: forwarder: Forwarding (remote) 127.0.0.1:38589 to (local) 127.0.0.1:0 for container 7734731030b2d877d008755bd3b30c616bece96ba3ec7bc670424b9924a4a1e1

2025-07-10 16:17:08.048 [info] forwarderProcess stdout: forwarder: ====forwarderPort=58593====

2025-07-10 16:17:08.048 [info] Found forwarder port: 58593
2025-07-10 16:17:08.048 [info] [tcpForward][(remote) 127.0.0.1:58593 -> (local) 127.0.0.1:58593] Starting no-op local tunnel
2025-07-10 16:17:15.266 [error] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] forwarder process stderr: Connection established

2025-07-10 16:17:15.333 [error] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] forwarder process stderr: Connection established

2025-07-10 16:17:16.840 [info] forwarderProcess stdout: forwarder: handleClient subprocess exited with code 0 and signal null

2025-07-10 16:17:16.840 [info] forwarderProcess stdout: forwarder: handleClient subprocess closed

2025-07-10 16:17:17.438 [error] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] forwarder process stderr: error: Error: read ECONNRESET
    at Pipe.onStreamRead (node:internal/stream_base_commons:218:20)

2025-07-10 16:17:17.448 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] forwarder process stdout ended
2025-07-10 16:17:19.901 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] SSH host stream ended
2025-07-10 16:17:19.901 [error] [ssh_auth_socket][/tmp/cursor-remote-ssh-50030f2b-b7a8-4470-9561-8313eb8115a5.sock] connection done
2025-07-10 16:17:21.116 [info] forwarderProcess stdout: forwarder: handleClient subprocess exited with code 0 and signal null

2025-07-10 16:17:21.117 [info] forwarderProcess stdout: forwarder: handleClient subprocess exited with code 0 and signal null

2025-07-10 16:17:21.117 [info] forwarderProcess stdout: forwarder: handleClient subprocess closed

2025-07-10 16:17:21.117 [info] forwarderProcess stdout: forwarder: handleClient subprocess closed

2025-07-10 16:17:47.209 [info] forwarderProcess stdout: forwarder: handleClient subprocess exited with code 0 and signal null

2025-07-10 16:17:47.209 [info] forwarderProcess stdout: forwarder: handleClient subprocess closed```
3 Likes

Same issue here - there’s another thread about this here: Anyspheres Dev Container Extension: Use the Name Property of DevContainers + Allow to Switch Containers

A workaround suggested in that thread is to open the command palette and select Developer: Reload Window. That seems to work for me

Hi all – looking into this issue. Are you using Docker over SSH, or is Docker running locally?

locally here

4 Likes

Running into the exact same issue. 1Password SSH agent, Docker locally, connects just fine for 1 minute, then hangs up.

I run Docker locally on macOS.

Hi @florian.lorenzen , @sbd , @someguynamedmike, and @dhawkins1234 – thank you for your patience as we worked through this issue. We just released version 1.0.15 of the Remote Containers extension, which has a completely new implementation for SSH socket forwarding to hopefully make it faster and more reliable. Could you try upgrading to the latest version of the extension?

Thanks! So far so good over here. I’ve been doing ssh -T [email protected] every few minutes and it’s consistently working. Before it stopped after about a minute.

This is a HUGE help. Thanks

2025-07-16 08:30:56.185 [info] [server install] stdout: cf658d8c9000f0e3e7cf3f0d: start
exitCode==0==
listeningOn==33737==
connectionToken==a4c83ea9-702e-4ea4-bd60-49f575144da4==
logFile==/home/vscode/.cursor-server/.a8e95743c5268be73767c46944a71f4465d05c90.log==
arch==aarch64==
remoteServerNodePath==/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node==
platform==linux==
cf658d8c9000f0e3e7cf3f0d: end

2025-07-16 08:30:56.185 [info] Finished installing remote server in container. Parsing output...
2025-07-16 08:30:56.185 [info] Result map: {
  "exitCode": "0",
  "listeningOn": "33737",
  "connectionToken": "a4c83ea9-702e-4ea4-bd60-49f575144da4",
  "logFile": "/home/vscode/.cursor-server/.a8e95743c5268be73767c46944a71f4465d05c90.log",
  "arch": "aarch64",
  "remoteServerNodePath": "/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node",
  "platform": "linux"
}
2025-07-16 08:30:56.185 [info] Server install command exit code: 0
2025-07-16 08:30:56.185 [info] Registering label formatter for dev-container*
2025-07-16 08:30:56.190 [info] [server install]: exit
2025-07-16 08:30:56.201 [info] Forwarding SSH agent /Users/mike.nichie/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock socket
2025-07-16 08:30:56.202 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] Creating symlink /tmp/cursor-remote-ssh-69ac1e4d-d8d0-47c6-b6be-9602160db213.sock -> /tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock
2025-07-16 08:30:56.202 [info] Spawned process 22980: 'docker' 'exec' '-u' 'vscode' '2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670' 'ln' '-sf' '/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock' '/tmp/cursor-remote-ssh-69ac1e4d-d8d0-47c6-b6be-9602160db213.sock'
2025-07-16 08:30:56.202 [info] [symlink ssh_auth_sock]: Running command: docker
2025-07-16 08:30:56.288 [info] [symlink ssh_auth_sock]: Command completed with exit code 0
2025-07-16 08:30:56.289 [info] Forwarding (host) /Users/mike.nichie/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock to (container) /tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock for container 2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670
2025-07-16 08:30:56.289 [info] Spawned process 22981: '/Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)' '/Users/mike.nichie/.cursor/extensions/anysphere.remote-containers-1.0.15/dist/scripts/forwarder.js' 'socket' '2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670' '/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node' 'vscode' '/Users/mike.nichie/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock' '/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock'
2025-07-16 08:30:56.289 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] created socket server in container and bound forwarder to it
2025-07-16 08:30:56.289 [info] Forwarding exec server locally via tcpForward method
2025-07-16 08:30:56.289 [info] Forwarding remote port 127.0.0.1:8000 to 8000
2025-07-16 08:30:56.289 [info] Forwarding remote port 127.0.0.1:8001 to 8001
2025-07-16 08:30:56.289 [info] Forwarding remote port 127.0.0.1:35729 to 35729
2025-07-16 08:30:56.290 [info] Forwarding 127.0.0.1:33737 to 127.0.0.1:0 for container 2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670
2025-07-16 08:30:56.290 [info] Spawned process 22982: '/Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)' '/Users/mike.nichie/.cursor/extensions/anysphere.remote-containers-1.0.15/dist/scripts/forwarder.js' 'port' '2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670' '/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node' 'vscode' '127.0.0.1:0' '127.0.0.1:33737'
2025-07-16 08:30:56.392 [info] [tunnel-forwarding] stdout: forwarder: Forwarding (remote) 127.0.0.1:33737 to (local) 127.0.0.1:0

2025-07-16 08:30:56.395 [info] [tunnel-forwarding] stdout: forwarder: ====forwarderPort=52644====

2025-07-16 08:30:56.395 [info] Found forwarder port: 52644
2025-07-16 08:30:56.395 [info] [tcpForward][(remote) 127.0.0.1:52644 -> (local) 127.0.0.1:52644] Starting no-op local tunnel
2025-07-16 08:30:56.395 [info] Returning resolved authority
2025-07-16 08:30:56.397 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: ====socketForward=success====
2025-07-16 08:30:56.517 [info] [tunnel-forwarding] stdout: forwarder: handleClient stderr: Connection established


2025-07-16 08:30:56.741 [info] [tunnel-forwarding] stdout: forwarder: handleClient stderr: Connection established


2025-07-16 08:31:01.929 [info] Forwarding 0.0.0.0:35729 to 127.0.0.1:35729 for container 2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670
2025-07-16 08:31:01.929 [info] Spawned process 23039: '/Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)' '/Users/mike.nichie/.cursor/extensions/anysphere.remote-containers-1.0.15/dist/scripts/forwarder.js' 'port' '2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670' '/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node' 'vscode' '127.0.0.1:35729' '0.0.0.0:35729'
2025-07-16 08:31:02.002 [info] [tunnel-forwarding] stdout: forwarder: Forwarding (remote) 0.0.0.0:35729 to (local) 127.0.0.1:35729

2025-07-16 08:31:02.005 [info] [tunnel-forwarding] stdout: forwarder: ====forwarderPort=35729====

2025-07-16 08:31:02.005 [info] Found forwarder port: 35729
2025-07-16 08:31:02.005 [info] [tcpForward][(remote) 127.0.0.1:35729 -> (local) 127.0.0.1:35729] Starting no-op local tunnel
2025-07-16 08:31:02.007 [info] Forwarding 127.0.0.1:8000 to 127.0.0.1:8000 for container 2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670
2025-07-16 08:31:02.007 [info] Spawned process 23048: '/Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)' '/Users/mike.nichie/.cursor/extensions/anysphere.remote-containers-1.0.15/dist/scripts/forwarder.js' 'port' '2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670' '/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node' 'vscode' '127.0.0.1:8000' '127.0.0.1:8000'
2025-07-16 08:31:02.084 [info] [tunnel-forwarding] stdout: forwarder: Forwarding (remote) 127.0.0.1:8000 to (local) 127.0.0.1:8000

2025-07-16 08:31:02.086 [info] [tunnel-forwarding] stdout: forwarder: ====forwarderPort=8000====

2025-07-16 08:31:02.086 [info] Found forwarder port: 8000
2025-07-16 08:31:02.086 [info] [tcpForward][(remote) 127.0.0.1:8000 -> (local) 127.0.0.1:8000] Starting no-op local tunnel
2025-07-16 08:31:02.088 [info] Forwarding 127.0.0.1:8001 to 127.0.0.1:8001 for container 2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670
2025-07-16 08:31:02.088 [info] Spawned process 23059: '/Applications/Cursor.app/Contents/Frameworks/Cursor Helper (Plugin).app/Contents/MacOS/Cursor Helper (Plugin)' '/Users/mike.nichie/.cursor/extensions/anysphere.remote-containers-1.0.15/dist/scripts/forwarder.js' 'port' '2cddba925846ffe3e6b188d8131fd10035540d283ec33bfde447cffdcafa0670' '/home/vscode/.cursor-server/bin/a8e95743c5268be73767c46944a71f4465d05c90/node' 'vscode' '127.0.0.1:8001' '127.0.0.1:8001'
2025-07-16 08:31:02.169 [info] [tunnel-forwarding] stdout: forwarder: Forwarding (remote) 127.0.0.1:8001 to (local) 127.0.0.1:8001

2025-07-16 08:31:02.171 [info] [tunnel-forwarding] stdout: forwarder: ====forwarderPort=8001====

2025-07-16 08:31:02.171 [info] Found forwarder port: 8001
2025-07-16 08:31:02.171 [info] [tcpForward][(remote) 127.0.0.1:8001 -> (local) 127.0.0.1:8001] Starting no-op local tunnel
2025-07-16 08:31:02.373 [info] [tunnel-forwarding] stdout: forwarder: handleClient stderr: Connection established


2025-07-16 08:31:02.668 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection established 0
2025-07-16 08:31:02.995 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket end 0
2025-07-16 08:31:02.996 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket close 0
2025-07-16 08:31:02.996 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection not found:  {"i":0,"end":true}
2025-07-16 08:31:08.387 [info] [tunnel-forwarding] stdout: forwarder: handleClient stderr: Remote close


2025-07-16 08:31:08.401 [info] [tunnel-forwarding] stdout: forwarder: handleClient subprocess exited with code 0 and signal null

2025-07-16 08:31:08.402 [info] [tunnel-forwarding] stdout: forwarder: handleClient subprocess closed

2025-07-16 08:33:29.140 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection established 1
2025-07-16 08:33:29.475 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket end 1
2025-07-16 08:33:29.476 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket close 1
2025-07-16 08:33:29.477 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection not found:  {"i":1,"end":true}
2025-07-16 08:33:32.077 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection established 2
2025-07-16 08:33:32.410 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket end 2
2025-07-16 08:33:32.412 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket close 2
2025-07-16 08:33:32.414 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection not found:  {"i":2,"end":true}
2025-07-16 08:34:17.409 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection established 3
2025-07-16 08:34:17.752 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket end 3
2025-07-16 08:34:17.753 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket close 3
2025-07-16 08:34:29.602 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection established 4
2025-07-16 08:34:29.917 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket end 4
Socket close 4
2025-07-16 08:34:47.343 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Connection established 5
2025-07-16 08:34:47.668 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket end 5
2025-07-16 08:34:47.668 [info] [ssh_auth_socket][/tmp/cursor-remote-ssh-c9937344-e4d7-403e-962c-62a06aa44adf.sock] forwarder process stdout: forwarder: handleClient stderr: Socket close 5
1 Like

@ravirahman Working for me as well! Thanks for the quick resolution.

1 Like

This topic was automatically closed 22 days after the last reply. New replies are no longer allowed.