gravitational/teleport · error
no security keys found
Error message
no security keys found
What it means
RunOnFIDO2Devices enumerates FIDO2 device locations via fidoDeviceLocations() and this guard fires when the list is empty, meaning no security keys (or platform authenticators) are visible to the host before any prompt is shown.
Source
Thrown at lib/auth/webauthncli/fido2.go:680
pinAwareCallbackFunc func(dev FIDODevice, info *deviceInfo, pin string) (requiresPIN bool, err error)
)
// runPrompt defines the prompt operations necessary for runOnFIDO2Devices.
// (RegisterPrompt happens to match the minimal interface required.)
type runPrompt RegisterPrompt
func runOnFIDO2Devices(
ctx context.Context,
prompt runPrompt,
filter deviceFilterFunc,
deviceCallback deviceCallbackFunc,
) error {
locs, err := fidoDeviceLocations()
if err != nil {
return trace.Wrap(err, "device locations")
}
if len(locs) == 0 {
return trace.Wrap(errors.New("no security keys found"))
}
devices, devicesC, err := startDevices(locs, filter, deviceCallback, prompt)
if err != nil {
return trace.Wrap(err)
}
var receiveCount int
defer func() {
// Cancel all in-flight requests, if any.
devices.cancelAll(nil /* except */)
// Give the devices some time to tidy up, but don't wait forever.
maxWait := time.NewTimer(fido2DeviceMaxWait)
defer maxWait.Stop()
for receiveCount < devices.len() {
select {View on GitHub (pinned to 1283425b60)
Solutions
- Plug in a FIDO2 security key and retry
- Check the key is visible to the OS (lsusb on Linux, or the browser/OS authenticator settings)
- On Linux, verify udev rules for the security key are installed so the device is accessible
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at lib/auth/webauthncli/fido2.go:680 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of gravitational/teleport@1283425b60 (2026-09-02).
Data as JSON: /api/errors/22d11e0f728aa851.
Report an issue: GitHub.