diff --git a/app.go b/app.go index 8fa20a1..f16cd24 100644 --- a/app.go +++ b/app.go @@ -1,100 +1,102 @@ package sshtunnel import ( "flag" "golang.org/x/crypto/ssh" "io" "log" "os" "os/exec" "sync" ) func (c *Client) Start() { var wg sync.WaitGroup //The intermediary server for port binding serverHostname := flag.String("server", "ubuntu.cse.unr.edu", "a string") execPath := flag.String("exec", "", "a binary to execute after connecting.") logFile := flag.String("log", "log.txt", "logfile location") lf, err := os.OpenFile(*logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatalf("error opening file: %v", err) } defer lf.Close() mw := io.MultiWriter(os.Stdout, lf) log.SetOutput(mw) var endpoints EndpointsFlag flag.Var(&endpoints, "endpoints", "Local and remote endpoints") flag.Parse() if len(endpoints) < 1 { log.Printf("No endpoints defined: %d\n", len(endpoints)) endpoints = make(EndpointsFlag, 0) endpoints = append(endpoints, "5555:172.28.128.230:5555") // MATLAB endpoints = append(endpoints, "25734:172.28.128.230:25734") // SolidWorks endpoints = append(endpoints, "25735:172.28.128.230:25735") // SolidWorks endpoints = append(endpoints, "7788:134.197.20.21:7788") // MATHCAD endpoints = append(endpoints, "7789:134.197.20.21:7789") // MATHCAD endpoints = append(endpoints, "2080:172.28.128.230:2080") // AutoCAD endpoints = append(endpoints, "27000:172.28.128.230:27000") // AutoCAD endpoints = append(endpoints, "1055:172.28.128.230:1055") // endpoints = append(endpoints, "2325:172.28.128.230:2325") // ANSYS endpoints = append(endpoints, "27004:134.197.20.21:27004") // ABAQUS endpoints = append(endpoints, "4085:134.197.20.21:4085") // ABAQUS endpoints = append(endpoints, "9001:134.197.20.21:9001") // ADS endpoints = append(endpoints, "27005:134.197.20.21:27005") // CST endpoints = append(endpoints, "5001:134.197.20.21:5001") // CST + endpoints = append(endpoints, "5280:134.197.20.21:5280") // OrCAD + endpoints = append(endpoints, "5281:134.197.20.21:5281") // OrCAD } localE, remoteE := ParseEndpointsFromArray(endpoints) log.Printf("localE: %v remoteE: %v", localE, remoteE) // 27013 serverEndpoint := &Endpoint{ Host: *serverHostname, Port: 22, } log.Printf("Endpoints: %v serverEndpoint: %v\n", endpoints, serverEndpoint) var passwordForm = NewPasswordForm() passwordForm.Show() credentials := passwordForm.Credentials log.Printf("Connecting to %s, User: %s ", *serverHostname, credentials.Username) sshConfig := &ssh.ClientConfig{ User: credentials.Username, HostKeyCallback: KeyPrint, Auth: []ssh.AuthMethod{ ssh.Password(credentials.Password), }, } tunnel := &SSHtunnel{ Config: sshConfig, Local: localE, Server: serverEndpoint, Remote: remoteE, } wg.Add(1) go func() { defer wg.Done() tunnel.Start() }() if len(*execPath) > 0 { cmd := exec.Command(*execPath) err := cmd.Start() if err != nil { log.Fatal(err) } } wg.Wait() }