func (cmd *SSH) Execute(fc flags.FlagContext) error { app := cmd.appReq.GetApplication() info, err := cmd.getSSHEndpointInfo() if err != nil { return errors.New(T("Error getting SSH info:") + err.Error()) } sshAuthCode, err := cmd.sshCodeGetter.Get() if err != nil { return errors.New(T("Error getting one time auth code: ") + err.Error()) } //init secureShell if it is not already set by SetDependency() with fakes if cmd.secureShell == nil { cmd.secureShell = sshCmd.NewSecureShell( sshCmd.DefaultSecureDialer(), sshTerminal.DefaultHelper(), sshCmd.DefaultListenerFactory(), 30*time.Second, app, info.SSHEndpointFingerprint, info.SSHEndpoint, sshAuthCode, ) } err = cmd.secureShell.Connect(cmd.opts) if err != nil { return errors.New(T("Error opening SSH connection: ") + err.Error()) } defer cmd.secureShell.Close() err = cmd.secureShell.LocalPortForward() if err != nil { return errors.New(T("Error forwarding port: ") + err.Error()) } if cmd.opts.SkipRemoteExecution { err = cmd.secureShell.Wait() } else { err = cmd.secureShell.InteractiveSession() } if err != nil { if exitError, ok := err.(*ssh.ExitError); ok { exitStatus := exitError.ExitStatus() if sig := exitError.Signal(); sig != "" { cmd.ui.Say(fmt.Sprintf(T("Process terminated by signal: %s. Exited with")+" %d.\n", sig, exitStatus)) } os.Exit(exitStatus) } else { return errors.New(T("Error: ") + err.Error()) } } return nil }
terminalHelper terminal.TerminalHelper keepAliveDuration time.Duration secureShell sshCmd.SecureShell stdinPipe *fake_io.FakeWriteCloser currentApp models.Application sshEndpointFingerprint string sshEndpoint string token string ) BeforeEach(func() { fakeTerminalHelper = new(terminalfakes.FakeTerminalHelper) terminalHelper = terminal.DefaultHelper() fakeListenerFactory = new(sshfakes.FakeListenerFactory) fakeListenerFactory.ListenStub = net.Listen keepAliveDuration = 30 * time.Second currentApp = models.Application{} sshEndpoint = "" sshEndpointFingerprint = "" token = "" fakeConnection = new(fake_ssh.FakeConn) fakeSecureClient = new(sshfakes.FakeSecureClient) fakeSecureDialer = new(sshfakes.FakeSecureDialer) fakeSecureSession = new(sshfakes.FakeSecureSession)