diff --git a/client/embed/embed.go b/client/embed/embed.go index 543ec9561..8e1ecca77 100644 --- a/client/embed/embed.go +++ b/client/embed/embed.go @@ -305,13 +305,18 @@ func (c *Client) Start(startCtx context.Context) error { // never completes a stream leaves them retrying with no deadline of their // own, so a caller's start timeout has to reach them. Neither outlives // startup: authClient is closed below. - authClient, err := auth.NewAuth(startCtx, c.config.PrivateKey, c.config.ManagementURL, c.config) + // Carry the device name onto the start context: registration happens during + // login and reads it from there, so authenticating on a context without it + // would register every client under the host's hostname instead. + authCtx := context.WithValue(startCtx, system.DeviceNameCtxKey, c.deviceName) //nolint:staticcheck + + authClient, err := auth.NewAuth(authCtx, c.config.PrivateKey, c.config.ManagementURL, c.config) if err != nil { return fmt.Errorf("create auth client: %w", err) } defer authClient.Close() - if err, _ := authClient.Login(startCtx, c.setupKey, c.jwtToken); err != nil { + if err, _ := authClient.Login(authCtx, c.setupKey, c.jwtToken); err != nil { return fmt.Errorf("login: %w", err) } client := internal.NewConnectClient(ctx, c.config, c.recorder)