Skip to content

Conversation

@rfay
Copy link

@rfay rfay commented Jan 28, 2026

Fixes "ssh: no key found" errors when using SSH agent without physical key files on disk (e.g., DDEV tests with ddev-ssh-agent).

For example:

[WARN]  2026/01/28 09:54:55 ssh: no key found &{0x4000084120}
[WARN]  2026/01/28 09:54:55 ssh: no key found &{0x4000084120}

This also improves the debug/warning when no key is found by showing the path instead of just a pointer.

Changes:

  1. utils/shell.go:

    • Gracefully handle missing identity files, skip them and use agent keys
    • Skip ~/.ssh directory scan when SSH agent already has keys
    • Only scan directory as last resort to avoid warnings for non-key files
  2. utils/sshportal.go:

    • Bypass machinery's sshtoken.RetrieveToken entirely when using agent-only
    • Implement retrieveTokenViaAgent() to directly use SSH agent keys
    • Routes based on availability: agent-only, file-based, or error

Root cause: machinery v0.0.31's sshtoken.RetrieveToken returns errors when identity files don't exist (lines 36-40, 52-56) instead of falling back to SSH agent keys. This is a workaround until machinery is fixed upstream.

See:

rfay and others added 2 commits January 28, 2026 10:05
Fixes "ssh: no key found" errors when using SSH agent without physical
key files on disk (e.g., DDEV tests with ddev-ssh-agent).

Changes:
1. utils/shell.go:
   - Gracefully handle missing identity files, skip them and use agent keys
   - Skip ~/.ssh directory scan when SSH agent already has keys
   - Only scan directory as last resort to avoid warnings for non-key files

2. utils/sshportal.go:
   - Bypass machinery's sshtoken.RetrieveToken entirely when using agent-only
   - Implement retrieveTokenViaAgent() to directly use SSH agent keys
   - Routes based on availability: agent-only, file-based, or error

Root cause: machinery v0.0.31's sshtoken.RetrieveToken returns errors when
identity files don't exist (lines 36-40, 52-56) instead of falling back to
SSH agent keys. This is a workaround until machinery is fixed upstream.

See:
- https://github.com/uselagoon/machinery/blob/main/utils/sshtoken/sshtoken.go
- uselagoon/lagoon-cli#442

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Previously, SSH key errors showed unhelpful output like:
"ssh: no key found &{0x4000084120}"

This was caused by passing os.Stdout (a file descriptor pointer) as the
second parameter to LogWarning, which printed the pointer address.

Changes:
- Include actual file paths in all SSH key error messages
- Change non-key file warnings to debug messages (reduces noise)
- Pass nil instead of os.Stdout to LogWarning to avoid pointer output
- Add directory path context to all error messages

Now shows helpful messages like:
"Skipping /home/user/.ssh/config: ssh: no key found"

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant