diff --git a/app.go b/app.go index 47f8f8b..c8a3ec1 100644 --- a/app.go +++ b/app.go @@ -1,67 +1,82 @@ package sshtunnel import ( "flag" "log" "golang.org/x/crypto/ssh" - + "sync" + "os/exec" ) 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.") //TODO Add logfile //TODO Add exec - Executes an application. 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") // SolidWorks + endpoints = append(endpoints, "7788:134.197.20.21:7788") // MATHCAD } localE, remoteE:= ParseEndpointsFromArray(endpoints) log.Printf("localE: %v remoteE: %v", localE, remoteE) // 27013 serverEndpoint := &Endpoint{ Host: *serverHostname, Port: 22, } log.Printf("Endpoints: %v \nserverEndpoint: %v\n", endpoints, serverEndpoint) //log.Printf("%v %v", serverEndpoint) //credChan := make(chan Credentials) var passwordForm= NewPasswordForm() //passwordForm.SetChan(credChan) 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, } - tunnel.Start() + wg.Add(1) + go func(){ + defer wg.Done() + tunnel.Start() + }(); + + cmd := exec.Command(*execPath) + err := cmd.Start() + if err != nil { + log.Fatal(err) + } + + wg.Wait() } diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 0000000..aaee3bc --- /dev/null +++ b/bin/README.md @@ -0,0 +1,3 @@ +rsrc -manifest main.manifest -ico=nevada_n_rgb_UvV_icon.ico + +go build \ No newline at end of file diff --git a/bin/main.manifest b/bin/main.manifest new file mode 100644 index 0000000..4b567ad --- /dev/null +++ b/bin/main.manifest @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/bin/nevada_n_rgb_UvV_icon.ico b/bin/nevada_n_rgb_UvV_icon.ico new file mode 100644 index 0000000..7d444df Binary files /dev/null and b/bin/nevada_n_rgb_UvV_icon.ico differ