[BUG] SSH: Handshake fails with Teleport proxy — no matching host key format (SSH certificates not supported)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Summary
Claude Code Desktop's built-in SSH connection fails when connecting through a Teleport proxy with the error:
Handshake failed: no matching host key format
Root Cause
Teleport's SSH proxy only presents SSH certificate host keys (ecdsa-sha2-nistp256-cert-v01@openssh.com). The embedded SSH library in Claude Code Desktop does not support the -cert-v01@openssh.com certificate host key format, causing the handshake to fail.
The system's OpenSSH client handles this fine — ssh <host> from a terminal works without issues.
SSH Config
Host myhost
HostName <hostname>
User <user>
ProxyCommand "tsh" proxy ssh --cluster=<cluster>.teleport.sh --proxy=<cluster>.teleport.sh:443 %r@%h:%p
Verbose SSH Output (relevant lines)
debug2: peer server KEXINIT proposal
debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com
debug1: kex: host key algorithm: ecdsa-sha2-nistp256-cert-v01@openssh.com
The server offers only the certificate variant. The embedded SSH library has no matching algorithm.
What Should Happen?
Claude Code Desktop should support SSH certificate host key formats (*-cert-v01@openssh.com), or optionally delegate to the system SSH binary for connection handling.
Error Messages/Logs
Steps to Reproduce
- Configure an SSH host that connects through a Teleport proxy using
tsh proxy sshas theProxyCommand - In Claude Code Desktop, add an SSH connection pointing to that host
- Attempt to connect — handshake fails immediately
Claude Model
None
Is this a regression?
No, this never worked
Last Working Version
_No response_
Claude Code Version
1.2581.0 (Desktop App)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Other
Additional Information
_No response_
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗