github.com/devops-filetransfer/sshego@v7.0.4+incompatible/cmd/gosshtun/main.go (about) 1 package main 2 3 import ( 4 "context" 5 "flag" 6 "fmt" 7 "io" 8 "log" 9 "os" 10 11 tun "github.com/glycerine/sshego" 12 ssh "github.com/glycerine/sshego/xendor/github.com/glycerine/xcryptossh" 13 ) 14 15 const ProgramName = "gosshtun" 16 17 func main() { 18 19 myflags := flag.NewFlagSet(ProgramName, flag.ExitOnError) 20 cfg := tun.NewSshegoConfig() 21 cfg.DefineFlags(myflags) 22 err := myflags.Parse(os.Args[1:]) 23 if cfg.ShowVersion { 24 fmt.Printf("\n%v\n", tun.SourceVersion()) 25 os.Exit(0) 26 } 27 err = cfg.ValidateConfig() 28 if err != nil { 29 log.Fatalf("%s command line flag error: '%s'", ProgramName, err) 30 } 31 //p("cfg = %#v", cfg) 32 h, err := tun.NewKnownHosts(cfg.ClientKnownHostsPath, tun.KHJson) 33 panicOn(err) 34 cfg.KnownHosts = h 35 36 if cfg.WriteConfigOut != "" { 37 var o io.WriteCloser 38 if cfg.WriteConfigOut == "-" { 39 o = os.Stdout 40 } else { 41 o, err = os.Create(cfg.WriteConfigOut) 42 if err != nil { 43 panic(err) 44 } 45 } 46 err = cfg.SaveConfig(o) 47 if err != nil { 48 panic(err) 49 } 50 } 51 52 if cfg.AddUser != "" { 53 tun.AddUserAndExit(cfg) 54 } 55 56 if cfg.DelUser != "" { 57 tun.DelUserAndExit(cfg) 58 } 59 60 passphrase := "" 61 totpUrl := "" 62 ctx := context.Background() 63 halt := ssh.NewHalter() 64 65 _, _, err = cfg.SSHConnect(ctx, h, cfg.Username, cfg.PrivateKeyPath, 66 cfg.SSHdServer.Host, cfg.SSHdServer.Port, passphrase, totpUrl, halt) 67 if err != nil { 68 fmt.Println(err.Error()) 69 os.Exit(0) 70 } 71 if err != nil { 72 panic(err) 73 } 74 if !cfg.WriteConfigOnly { 75 select {} 76 } 77 } 78 79 func panicOn(err error) { 80 if err != nil { 81 panic(err) 82 } 83 }