Skip to content

Commit

Permalink
Merge pull request #92 from glassechidna/master
Browse files Browse the repository at this point in the history
Added Server.KeyboardInteractiveHandler
belak authored Jan 7, 2019

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
2 parents cbabf54 + c2883aa commit bed87f3
Showing 2 changed files with 13 additions and 0 deletions.
9 changes: 9 additions & 0 deletions server.go
Original file line number Diff line number Diff line change
@@ -24,6 +24,7 @@ type Server struct {
HostSigners []Signer // private keys for the host key, must have at least one
Version string // server version to be sent before the initial handshake

KeyboardInteractiveHandler KeyboardInteractiveHandler // keyboard-interactive authentication handler
PasswordHandler PasswordHandler // password authentication handler
PublicKeyHandler PublicKeyHandler // public key authentication handler
PtyCallback PtyCallback // callback for allowing PTY sessions, allows all if nil
@@ -105,6 +106,14 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
return ctx.Permissions().Permissions, nil
}
}
if srv.KeyboardInteractiveHandler != nil {
config.KeyboardInteractiveCallback = func(conn gossh.ConnMetadata, challenger gossh.KeyboardInteractiveChallenge) (*gossh.Permissions, error) {
if ok := srv.KeyboardInteractiveHandler(ctx, challenger); !ok {
return ctx.Permissions().Permissions, fmt.Errorf("permission denied")
}
return ctx.Permissions().Permissions, nil
}
}
return config
}

4 changes: 4 additions & 0 deletions ssh.go
Original file line number Diff line number Diff line change
@@ -2,6 +2,7 @@ package ssh

import (
"crypto/subtle"
gossh "golang.org/x/crypto/ssh"
"net"
)

@@ -39,6 +40,9 @@ type PublicKeyHandler func(ctx Context, key PublicKey) bool
// PasswordHandler is a callback for performing password authentication.
type PasswordHandler func(ctx Context, password string) bool

// KeyboardInteractiveHandler is a callback for performing keyboard-interactive authentication.
type KeyboardInteractiveHandler func(ctx Context, challenger gossh.KeyboardInteractiveChallenge) bool

// PtyCallback is a hook for allowing PTY sessions.
type PtyCallback func(ctx Context, pty Pty) bool

0 comments on commit bed87f3

Please sign in to comment.