github.com/sleungcy-sap/cli@v7.1.0+incompatible/actor/sharedaction/ssh.go (about)

     1  package sharedaction
     2  
     3  import "code.cloudfoundry.org/cli/util/clissh"
     4  
     5  type TTYOption clissh.TTYRequest
     6  
     7  const (
     8  	RequestTTYAuto TTYOption = iota
     9  	RequestTTYNo
    10  	RequestTTYYes
    11  	RequestTTYForce
    12  )
    13  
    14  type LocalPortForward clissh.LocalPortForward
    15  
    16  type SSHOptions struct {
    17  	Commands              []string
    18  	Username              string
    19  	Passcode              string
    20  	Endpoint              string
    21  	HostKeyFingerprint    string
    22  	SkipHostValidation    bool
    23  	SkipRemoteExecution   bool
    24  	TTYOption             TTYOption
    25  	LocalPortForwardSpecs []LocalPortForward
    26  }
    27  
    28  func (actor Actor) ExecuteSecureShell(sshClient SecureShellClient, sshOptions SSHOptions) error {
    29  	err := sshClient.Connect(sshOptions.Username, sshOptions.Passcode, sshOptions.Endpoint, sshOptions.HostKeyFingerprint, sshOptions.SkipHostValidation)
    30  	if err != nil {
    31  		return err
    32  	}
    33  	defer sshClient.Close()
    34  
    35  	err = sshClient.LocalPortForward(convertActorToSSHPackageForwardingSpecs(sshOptions.LocalPortForwardSpecs))
    36  	if err != nil {
    37  		return err
    38  	}
    39  
    40  	if sshOptions.SkipRemoteExecution {
    41  		err = sshClient.Wait()
    42  	} else {
    43  		err = sshClient.InteractiveSession(sshOptions.Commands, clissh.TTYRequest(sshOptions.TTYOption))
    44  	}
    45  	return err
    46  }
    47  
    48  func convertActorToSSHPackageForwardingSpecs(actorSpecs []LocalPortForward) []clissh.LocalPortForward {
    49  	sshPackageSpecs := []clissh.LocalPortForward{}
    50  
    51  	for _, spec := range actorSpecs {
    52  		sshPackageSpecs = append(sshPackageSpecs, clissh.LocalPortForward(spec))
    53  	}
    54  
    55  	return sshPackageSpecs
    56  }