package sshhop import ( "flag" "log" "golang.org/x/crypto/ssh" "io/ioutil" ) func(c *Client) Start(){ //The intermediary server for port binding serverHostname := flag.String("server", "alpine.cse.unr.edu", "Intermediate Server") username := flag.String("username", "user", "Username") privKey := flag.String("privkey", "/nfs/home/user/.ssh/id_rsa", "Private Key") 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, "www.cse.unr.edu:22") endpoints = append(endpoints, "www.cse.unr.edu:22") endpoints = append(endpoints, "www.cse.unr.edu:22") } // 27013 serverEndpoint := &Endpoint{ Host: *serverHostname, Port: 22, } key, err := ioutil.ReadFile(*privKey) if err != nil { log.Fatalf("Unable to read private key: %v", err) } // Create the Signer for this private key. signer, err := ssh.ParsePrivateKey(key) if err != nil { log.Fatalf("unable to parse private key: %v", err) } sshConfig := &ssh.ClientConfig{ User: *username, HostKeyCallback: KeyPrint, Auth: []ssh.AuthMethod{ ssh.PublicKeys(signer), }, } tunnel := &SSHtunnel{ Config: sshConfig, Server: serverEndpoint, Remote: endpoints, } tunnel.Start() }