Browse Source

New settings option for a custom SSH host (#3763)

pull/3781/merge
imilo 8 years ago committed by 无闻
parent
commit
85fbd6e9c6
  1. 2
      conf/app.ini
  2. 1
      modules/setting/setting.go
  3. 10
      modules/ssh/ssh.go
  4. 4
      routers/install.go

2
conf/app.ini

@ -101,6 +101,8 @@ DISABLE_SSH = false
START_SSH_SERVER = false START_SSH_SERVER = false
; Domain name to be exposed in clone URL ; Domain name to be exposed in clone URL
SSH_DOMAIN = %(DOMAIN)s SSH_DOMAIN = %(DOMAIN)s
; Network interface builtin SSH server listens on
SSH_LISTEN_HOST = 0.0.0.0
; Port number to be exposed in clone URL ; Port number to be exposed in clone URL
SSH_PORT = 22 SSH_PORT = 22
; Port number builtin SSH server listens on ; Port number builtin SSH server listens on

1
modules/setting/setting.go

@ -78,6 +78,7 @@ var (
StartBuiltinServer bool `ini:"START_SSH_SERVER"` StartBuiltinServer bool `ini:"START_SSH_SERVER"`
Domain string `ini:"SSH_DOMAIN"` Domain string `ini:"SSH_DOMAIN"`
Port int `ini:"SSH_PORT"` Port int `ini:"SSH_PORT"`
ListenHost string `ini:"SSH_LISTEN_HOST"`
ListenPort int `ini:"SSH_LISTEN_PORT"` ListenPort int `ini:"SSH_LISTEN_PORT"`
RootPath string `ini:"SSH_ROOT_PATH"` RootPath string `ini:"SSH_ROOT_PATH"`
KeyTestPath string `ini:"SSH_KEY_TEST_PATH"` KeyTestPath string `ini:"SSH_KEY_TEST_PATH"`

10
modules/ssh/ssh.go

@ -110,10 +110,10 @@ func handleServerConn(keyID string, chans <-chan ssh.NewChannel) {
} }
} }
func listen(config *ssh.ServerConfig, port int) { func listen(config *ssh.ServerConfig, host string, port int) {
listener, err := net.Listen("tcp", "0.0.0.0:"+com.ToStr(port)) listener, err := net.Listen("tcp", host+":"+com.ToStr(port))
if err != nil { if err != nil {
panic(err) log.Fatal(4, "Fail to start SSH server: %v", err)
} }
for { for {
// Once a ServerConfig has been configured, connections can be accepted. // Once a ServerConfig has been configured, connections can be accepted.
@ -148,7 +148,7 @@ func listen(config *ssh.ServerConfig, port int) {
} }
// Listen starts a SSH server listens on given port. // Listen starts a SSH server listens on given port.
func Listen(port int) { func Listen(host string, port int) {
config := &ssh.ServerConfig{ config := &ssh.ServerConfig{
PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) { PublicKeyCallback: func(conn ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) {
pkey, err := models.SearchPublicKeyByContent(strings.TrimSpace(string(ssh.MarshalAuthorizedKey(key)))) pkey, err := models.SearchPublicKeyByContent(strings.TrimSpace(string(ssh.MarshalAuthorizedKey(key))))
@ -180,5 +180,5 @@ func Listen(port int) {
} }
config.AddHostKey(private) config.AddHostKey(private)
go listen(config, port) go listen(config, host, port)
} }

4
routers/install.go

@ -92,8 +92,8 @@ func GlobalInit() {
checkRunMode() checkRunMode()
if setting.InstallLock && setting.SSH.StartBuiltinServer { if setting.InstallLock && setting.SSH.StartBuiltinServer {
ssh.Listen(setting.SSH.ListenPort) ssh.Listen(setting.SSH.ListenHost, setting.SSH.ListenPort)
log.Info("SSH server started on :%v", setting.SSH.ListenPort) log.Info("SSH server started on %s:%v", setting.SSH.ListenHost, setting.SSH.ListenPort)
} }
} }

Loading…
Cancel
Save