func (*AppDialer) Dial(appName string, instanceIndex int, config *config_package.Config) (Client, error) { diegoSSHUser := fmt.Sprintf("diego:%s/%d", appName, instanceIndex) address := fmt.Sprintf("%s:2222", config.Target()) client, err := sshapi.New(diegoSSHUser, config.Username(), config.Password(), address) if err != nil { return nil, err } return client, nil }
func (ss *SecureShell) ConnectToShell(appName string, instanceIndex int, command string, config *config_package.Config) error { diegoSSHUser := fmt.Sprintf("diego:%s/%d", appName, instanceIndex) address := fmt.Sprintf("%s:2222", config.Target()) session, err := ss.Dialer.Dial(diegoSSHUser, config.Username(), config.Password(), address) if err != nil { return err } defer session.Close() sessionIn, err := session.StdinPipe() if err != nil { return err } sessionOut, err := session.StdoutPipe() if err != nil { return err } sessionErr, err := session.StderrPipe() if err != nil { return err } modes := ssh.TerminalModes{ ssh.ECHO: 1, ssh.TTY_OP_ISPEED: 115200, ssh.TTY_OP_OSPEED: 115200, } width, height := ss.Term.GetWinsize(os.Stdout.Fd()) terminalType := os.Getenv("TERM") if terminalType == "" { terminalType = "xterm" } if err := session.RequestPty(terminalType, height, width, modes); err != nil { return err } if state, err := ss.Term.SetRawTerminal(os.Stdin.Fd()); err == nil { defer ss.Term.RestoreTerminal(os.Stdin.Fd(), state) } go copyAndClose(nil, sessionIn, os.Stdin) go io.Copy(os.Stdout, sessionOut) go io.Copy(os.Stderr, sessionErr) resized := make(chan os.Signal, 16) signal.Notify(resized, syscall.SIGWINCH) defer func() { signal.Stop(resized) close(resized) }() go ss.resize(resized, session, os.Stdout.Fd(), width, height) keepaliveStopCh := make(chan struct{}) defer close(keepaliveStopCh) go ss.keepalive(session, keepaliveStopCh) if command == "" { session.Shell() session.Wait() } else { session.Run(command) } return nil }
testConfig = config.New(testPersister) }) Describe("Target", func() { It("sets the target", func() { testConfig.SetTarget("mynewapi.com") Expect(testConfig.Target()).To(Equal("mynewapi.com")) }) }) Describe("Username", func() { It("sets the target", func() { testConfig.SetLogin("ausername", "apassword") Expect(testConfig.Username()).To(Equal("ausername")) }) }) Describe("Receptor", func() { It("returns the Receptor with a username and password", func() { testConfig.SetTarget("mynewapi.com") testConfig.SetLogin("testusername", "testpassword") Expect(testConfig.Receptor()).To(Equal("http://*****:*****@receptor.mynewapi.com")) }) It("returns a Receptor without a username and password", func() { testConfig.SetTarget("mynewapi.com") testConfig.SetLogin("", "")