code: func (client *NodeClient) ExecuteSCP(cmd scp.Command) error {
  	shellCmd, err := cmd.GetRemoteShellCmd()
  	if err != nil {
  		return trace.Wrap(err)
  	}
  
  	s, err := client.Client.NewSession()
  	if err != nil {
  		return trace.Wrap(err)
  	}
  	defer s.Close()
  
  	stdin, err := s.StdinPipe()
  	if err != nil {
  		return trace.Wrap(err)
  	}
  
  	stdout, err := s.StdoutPipe()
  	if err != nil {
  		return trace.Wrap(err)
  	}
  
  	ch := utils.NewPipeNetConn(
  		stdout,
  		stdin,
  		utils.MultiCloser(),
  		&net.IPAddr{},
  		&net.IPAddr{},
  	)
  
  	closeC := make(chan interface{}, 1)
  	go func() {
  		if err = cmd.Execute(ch); err != nil {
  			log.Error(err)
  		}
  		stdin.Close()
  		close(closeC)
  	}()
  
  	runErr := s.Run(shellCmd)
  	<-closeC
  
  	if runErr != nil && (err == nil || trace.IsEOF(err)) {
  		err = runErr
  	}
  	if trace.IsEOF(err) {
  		err = nil
  	}
  	return trace.Wrap(err)
  }
docs: // ExecuteSCP runs remote scp command(shellCmd) on the remote server and
  // runs local scp handler using SCP Command