func newChannelHandlers() map[string]handlers.NewChannelHandler { runner := handlers.NewCommandRunner() shellLocator := handlers.NewShellLocator() dialer := &net.Dialer{} return map[string]handlers.NewChannelHandler{ "session": handlers.NewSessionChannelHandler(runner, shellLocator, getDaemonEnvironment(), 15*time.Second), "direct-tcpip": handlers.NewDirectTcpipChannelHandler(dialer), } }
func main() { cf_debug_server.AddFlags(flag.CommandLine) cf_lager.AddFlags(flag.CommandLine) flag.Parse() logger, reconfigurableSink := cf_lager.New("sshd") serverConfig, err := configure(logger) if err != nil { logger.Error("configure-failed", err) os.Exit(1) } runner := handlers.NewCommandRunner() shellLocator := handlers.NewShellLocator() dialer := &net.Dialer{} sshDaemon := daemon.New( logger, serverConfig, nil, map[string]handlers.NewChannelHandler{ "session": handlers.NewSessionChannelHandler(runner, shellLocator, getDaemonEnvironment(), 15*time.Second), "direct-tcpip": handlers.NewDirectTcpipChannelHandler(dialer), }, ) server := server.NewServer(logger, *address, sshDaemon) members := grouper.Members{ {"sshd", server}, } if dbgAddr := cf_debug_server.DebugAddress(flag.CommandLine); dbgAddr != "" { members = append(grouper.Members{ {"debug-server", cf_debug_server.Runner(dbgAddr, reconfigurableSink)}, }, members...) } group := grouper.NewOrdered(os.Interrupt, members) monitor := ifrit.Invoke(sigmon.New(group)) logger.Info("started") err = <-monitor.Wait() if err != nil { logger.Error("exited-with-failure", err) os.Exit(1) } logger.Info("exited") os.Exit(0) }