aboutsummaryrefslogtreecommitdiffstats
path: root/modules/ssh
diff options
context:
space:
mode:
authorzeripath <art27@cantab.net>2021-03-08 02:43:59 +0000
committerGitHub <noreply@github.com>2021-03-08 03:43:59 +0100
commitc03f530212249b18ffb73dfa47c99e9a4ed7c86c (patch)
treed6fc58f469c32e796491eee02a1f9ccbfde957ae /modules/ssh
parent78b7529cd471eafefd555fe82b8dbb8b63dcd9f5 (diff)
downloadgitea-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.go34
-rw-r--r--modules/ssh/ssh_graceful.go2
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 {