diff options
author | zeripath <art27@cantab.net> | 2021-03-08 02:43:59 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-08 03:43:59 +0100 |
commit | c03f530212249b18ffb73dfa47c99e9a4ed7c86c (patch) | |
tree | d6fc58f469c32e796491eee02a1f9ccbfde957ae /modules/ssh | |
parent | 78b7529cd471eafefd555fe82b8dbb8b63dcd9f5 (diff) | |
download | gitea-c03f530212249b18ffb73dfa47c99e9a4ed7c86c.tar.gz gitea-c03f530212249b18ffb73dfa47c99e9a4ed7c86c.zip |
Make internal SSH server host key path configurable (#14918)
* Make SSH server host key path configurable
* make it possible to have multiple keys
* Make gitea.rsa the default key
* Add some more logging
Signed-off-by: Andrew Thornton <art27@cantab.net>
Diffstat (limited to 'modules/ssh')
-rw-r--r-- | modules/ssh/ssh.go | 34 | ||||
-rw-r--r-- | modules/ssh/ssh_graceful.go | 2 |
2 files changed, 23 insertions, 13 deletions
diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index 925f9615b4..22683b003b 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -259,28 +259,38 @@ func Listen(host string, port int, ciphers []string, keyExchanges []string, macs }, } - keyPath := filepath.Join(setting.AppDataPath, "ssh/gogs.rsa") - isExist, err := util.IsExist(keyPath) - if err != nil { - log.Fatal("Unable to check if %s exists. Error: %v", keyPath, err) + keys := make([]string, 0, len(setting.SSH.ServerHostKeys)) + for _, key := range setting.SSH.ServerHostKeys { + isExist, err := util.IsExist(key) + if err != nil { + log.Fatal("Unable to check if %s exists. Error: %v", setting.SSH.ServerHostKeys, err) + } + if isExist { + keys = append(keys, key) + } } - if !isExist { - filePath := filepath.Dir(keyPath) + + if len(keys) == 0 { + filePath := filepath.Dir(setting.SSH.ServerHostKeys[0]) if err := os.MkdirAll(filePath, os.ModePerm); err != nil { log.Error("Failed to create dir %s: %v", filePath, err) } - err := GenKeyPair(keyPath) + err := GenKeyPair(setting.SSH.ServerHostKeys[0]) if err != nil { log.Fatal("Failed to generate private key: %v", err) } - log.Trace("New private key is generated: %s", keyPath) + log.Trace("New private key is generated: %s", setting.SSH.ServerHostKeys[0]) + keys = append(keys, setting.SSH.ServerHostKeys[0]) } - err = srv.SetOption(ssh.HostKeyFile(keyPath)) - if err != nil { - log.Error("Failed to set Host Key. %s", err) + for _, key := range keys { + log.Info("Adding SSH host key: %s", key) + err := srv.SetOption(ssh.HostKeyFile(key)) + if err != nil { + log.Error("Failed to set Host Key. %s", err) + } } go listen(&srv) @@ -291,7 +301,7 @@ func Listen(host string, port int, ciphers []string, keyExchanges []string, macs // Public key is encoded in the format for inclusion in an OpenSSH authorized_keys file. // Private Key generated is PEM encoded func GenKeyPair(keyPath string) error { - privateKey, err := rsa.GenerateKey(rand.Reader, 2048) + privateKey, err := rsa.GenerateKey(rand.Reader, 4096) if err != nil { return err } diff --git a/modules/ssh/ssh_graceful.go b/modules/ssh/ssh_graceful.go index a30e6fc297..c213aa7b88 100644 --- a/modules/ssh/ssh_graceful.go +++ b/modules/ssh/ssh_graceful.go @@ -12,7 +12,7 @@ import ( ) func listen(server *ssh.Server) { - gracefulServer := graceful.NewServer("tcp", server.Addr) + gracefulServer := graceful.NewServer("tcp", server.Addr, "SSH") err := gracefulServer.ListenAndServe(server.Serve) if err != nil { |