gitea源码

init.go 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package ssh
  4. import (
  5. "fmt"
  6. "net"
  7. "os"
  8. "path/filepath"
  9. "strconv"
  10. "strings"
  11. "code.gitea.io/gitea/modules/log"
  12. "code.gitea.io/gitea/modules/setting"
  13. "code.gitea.io/gitea/modules/util"
  14. )
  15. func Init() error {
  16. if setting.SSH.Disabled {
  17. builtinUnused()
  18. return nil
  19. }
  20. if setting.SSH.StartBuiltinServer {
  21. Listen(setting.SSH.ListenHost, setting.SSH.ListenPort, setting.SSH.ServerCiphers, setting.SSH.ServerKeyExchanges, setting.SSH.ServerMACs)
  22. log.Info("SSH server started on %q. Ciphers: %v, key exchange algorithms: %v, MACs: %v",
  23. net.JoinHostPort(setting.SSH.ListenHost, strconv.Itoa(setting.SSH.ListenPort)),
  24. util.Iif[any](setting.SSH.ServerCiphers == nil, "default", setting.SSH.ServerCiphers),
  25. util.Iif[any](setting.SSH.ServerKeyExchanges == nil, "default", setting.SSH.ServerKeyExchanges),
  26. util.Iif[any](setting.SSH.ServerMACs == nil, "default", setting.SSH.ServerMACs),
  27. )
  28. return nil
  29. }
  30. builtinUnused()
  31. if len(setting.SSH.TrustedUserCAKeys) > 0 && setting.SSH.AuthorizedPrincipalsEnabled {
  32. caKeysFileName := setting.SSH.TrustedUserCAKeysFile
  33. caKeysFileDir := filepath.Dir(caKeysFileName)
  34. err := os.MkdirAll(caKeysFileDir, 0o700) // SSH.RootPath by default (That is `~/.ssh` in most cases)
  35. if err != nil {
  36. return fmt.Errorf("failed to create directory %q for ssh trusted ca keys: %w", caKeysFileDir, err)
  37. }
  38. if err := os.WriteFile(caKeysFileName, []byte(strings.Join(setting.SSH.TrustedUserCAKeys, "\n")), 0o600); err != nil {
  39. return fmt.Errorf("failed to write ssh trusted ca keys to %q: %w", caKeysFileName, err)
  40. }
  41. }
  42. return nil
  43. }