2022-07-10 14:50:26 +08:00
// Copyright 2022 The Gitea Authors. All rights reserved.
2022-11-27 13:20:29 -05:00
// SPDX-License-Identifier: MIT
2022-07-10 14:50:26 +08:00
package ssh
import (
"fmt"
"net"
"os"
"path/filepath"
"strconv"
"strings"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
)
func Init ( ) error {
if setting . SSH . Disabled {
2022-08-20 22:09:41 +01:00
builtinUnused ( )
2022-07-10 14:50:26 +08:00
return nil
}
if setting . SSH . StartBuiltinServer {
Listen ( setting . SSH . ListenHost , setting . SSH . ListenPort , setting . SSH . ServerCiphers , setting . SSH . ServerKeyExchanges , setting . SSH . ServerMACs )
log . Info ( "SSH server started on %s. Cipher list (%v), key exchange algorithms (%v), MACs (%v)" ,
net . JoinHostPort ( setting . SSH . ListenHost , strconv . Itoa ( setting . SSH . ListenPort ) ) ,
setting . SSH . ServerCiphers , setting . SSH . ServerKeyExchanges , setting . SSH . ServerMACs ,
)
return nil
}
builtinUnused ( )
// FIXME: why 0o644 for a directory .....
if err := os . MkdirAll ( setting . SSH . KeyTestPath , 0 o644 ) ; err != nil {
return fmt . Errorf ( "failed to create directory %q for ssh key test: %w" , setting . SSH . KeyTestPath , err )
}
if len ( setting . SSH . TrustedUserCAKeys ) > 0 && setting . SSH . AuthorizedPrincipalsEnabled {
caKeysFileName := setting . SSH . TrustedUserCAKeysFile
caKeysFileDir := filepath . Dir ( caKeysFileName )
err := os . MkdirAll ( caKeysFileDir , 0 o700 ) // SSH.RootPath by default (That is `~/.ssh` in most cases)
if err != nil {
return fmt . Errorf ( "failed to create directory %q for ssh trusted ca keys: %w" , caKeysFileDir , err )
}
if err := os . WriteFile ( caKeysFileName , [ ] byte ( strings . Join ( setting . SSH . TrustedUserCAKeys , "\n" ) ) , 0 o600 ) ; err != nil {
return fmt . Errorf ( "failed to write ssh trusted ca keys to %q: %w" , caKeysFileName , err )
}
}
return nil
}