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  }