svrcfg.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package imsvr
  2. import "golang.org/x/crypto/ssh"
  3. type ServerConfig struct {
  4. BindAddress string
  5. MaxAuthTries int
  6. hostkeys []ssh.Signer
  7. ovrSSHPasswordCallback bool
  8. ovrSSHPublicKeyCallback bool
  9. ovrSSHKeyboardInteractiveCallback bool
  10. ovrSSHAuthLogCallback bool
  11. ocSSHPasswordCallback func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error)
  12. ocSSHPublicKeyCallback func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error)
  13. ocSSHKeyboardInteractiveCallback func(conn ssh.ConnMetadata, client ssh.KeyboardInteractiveChallenge) (*ssh.Permissions, error)
  14. ocSSHAuthLogCallback func(conn ssh.ConnMetadata, method string, err error)
  15. }
  16. func (c *ServerConfig) AddHostKey(key ssh.Signer) {
  17. if c.hostkeys == nil {
  18. c.hostkeys = make([]ssh.Signer, 1)
  19. c.hostkeys[0] = key
  20. }else {
  21. c.hostkeys = append(c.hostkeys, key)
  22. }
  23. }
  24. func (c *ServerConfig) OverrideSSHPasswordCallback(
  25. cb func(conn ssh.ConnMetadata, password []byte) (*ssh.Permissions, error),
  26. ){
  27. c.ovrSSHPasswordCallback = true
  28. c.ocSSHPasswordCallback = cb
  29. }
  30. func (c *ServerConfig) OverrideSSHPublicKeyCallback(
  31. cb func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error),
  32. ){
  33. c.ovrSSHPublicKeyCallback = true
  34. c.ocSSHPublicKeyCallback = cb
  35. }
  36. func (c *ServerConfig) OverrideSSHKeyboardInteractiveCallbakc(
  37. cb func(conn ssh.ConnMetadata, client ssh.KeyboardInteractiveChallenge) (*ssh.Permissions, error),
  38. ){
  39. c.ovrSSHKeyboardInteractiveCallback = true
  40. c.ocSSHKeyboardInteractiveCallback = cb
  41. }
  42. func (c *ServerConfig) OverrideSSHAuthLogCallback(
  43. cb func(conn ssh.ConnMetadata, method string, err error),
  44. ){
  45. c.ovrSSHAuthLogCallback = true
  46. c.ocSSHAuthLogCallback = cb
  47. }