@@ -267,7 +267,8 @@ func (s *ForwardServer) Serve() {
267267 sshutils .NewChanHandlerFunc (s .onChannel ),
268268 sshutils .StaticHostSigners (s .cfg .HostCertificate ),
269269 sshutils.AuthMethods {
270- PublicKey : s .userKeyAuth ,
270+ PublicKey : s .publicKeyCallback ,
271+ VerifiedPublicKey : s .verifiedPublicKeyCallback ,
271272 },
272273 sshutils .SetFIPS (s .cfg .FIPS ),
273274 sshutils .SetCiphers (s .cfg .Ciphers ),
@@ -295,7 +296,7 @@ func (s *ForwardServer) close() {
295296 }
296297}
297298
298- func ( s * ForwardServer ) userKeyAuth ( conn ssh.ConnMetadata , key ssh.PublicKey ) (* ssh.Permissions , error ) {
299+ func checkAndSetGitUser ( conn ssh.ConnMetadata , key ssh.PublicKey ) (ssh.ConnMetadata , error ) {
299300 cert , ok := key .(* ssh.Certificate )
300301 if ! ok {
301302 return nil , trace .BadParameter ("unsupported key type" )
@@ -319,9 +320,31 @@ func (s *ForwardServer) userKeyAuth(conn ssh.ConnMetadata, key ssh.PublicKey) (*
319320 conn = sshutils .NewSSHConnMetadataWithUser (conn , ident .Principals [0 ])
320321 }
321322
322- // Use auth.UserKeyAuth to verify user cert is signed by UserCA and to evaluate
323- // RBAC permissions.
324- permissions , err := s .auth .UserKeyAuth (conn , key )
323+ return conn , nil
324+ }
325+
326+ func (s * ForwardServer ) publicKeyCallback (conn ssh.ConnMetadata , key ssh.PublicKey ) (* ssh.Permissions , error ) {
327+ conn , err := checkAndSetGitUser (conn , key )
328+ if err != nil {
329+ return nil , trace .Wrap (err )
330+ }
331+
332+ permissions , err := s .auth .PublicKeyCallback (conn , key )
333+ if err != nil {
334+ userKeyAuthFailureCounter .Inc ()
335+ return nil , trace .Wrap (err )
336+ }
337+
338+ return permissions , nil
339+ }
340+
341+ func (s * ForwardServer ) verifiedPublicKeyCallback (conn ssh.ConnMetadata , key ssh.PublicKey , _ * ssh.Permissions , _ string ) (* ssh.Permissions , error ) {
342+ conn , err := checkAndSetGitUser (conn , key )
343+ if err != nil {
344+ return nil , trace .Wrap (err )
345+ }
346+
347+ permissions , err := s .auth .VerifiedPublicKeyCallback (conn , key , nil , "" )
325348 if err != nil {
326349 userKeyAuthFailureCounter .Inc ()
327350 return nil , trace .Wrap (err )
0 commit comments