prow/clonerefs/run.go
func addSSHKeys(paths []string) ([]string, error) {
	vars, err := exec.Command("ssh-agent").CombinedOutput()
	if err != nil {
		return []string{}, fmt.Errorf("failed to start ssh-agent: %v", err)
	}
	logrus.Info("Started SSH agent")
	// ssh-agent will output three lines of text, in the form:
	// SSH_AUTH_SOCK=xxx; export SSH_AUTH_SOCK;
	// SSH_AGENT_PID=xxx; export SSH_AGENT_PID;
	// echo Agent pid xxx;
	// We need to parse out the environment variables from that.
	parts := strings.Split(string(vars), ";")
	env := []string{strings.TrimSpace(parts[0]), strings.TrimSpace(parts[2])}
	for _, keyPath := range paths {
		// we can be given literal paths to keys or paths to dirs
		// that are mounted from a secret, so we need to check which
		// we have
		if err := filepath.Walk(keyPath, func(path string, info os.FileInfo, err error) error {
			if strings.HasPrefix(info.Name(), "..") {
				// kubernetes volumes also include files we
				// should not look be looking into for keys
				if info.IsDir() {
					return filepath.SkipDir
				}
				return nil
			}
			if info.IsDir() {
				return nil
			}

			cmd := exec.Command("ssh-add", path)
			cmd.Env = append(cmd.Env, env...)
			if output, err := cmd.CombinedOutput(); err != nil {
				return fmt.Errorf("failed to add ssh key at %s: %v: %s", path, err, output)
			}
			logrus.Infof("Added SSH key at %s", path)
			return nil
		}); err != nil {
			return env, fmt.Errorf("error walking path %q: %v", keyPath, err)
		}
	}
	return env, nil
}
func addSSHKeys(paths []string) ([]string, error) {
	vars, err := exec.Command("ssh-agent").CombinedOutput()
	if err != nil {
		return []string{}, fmt.Errorf("failed to start ssh-agent: %v", err)
	}
	logrus.Info("Started SSH agent")
	// ssh-agent will output three lines of text, in the form:
	// SSH_AUTH_SOCK=xxx; export SSH_AUTH_SOCK;
	// SSH_AGENT_PID=xxx; export SSH_AGENT_PID;
	// echo Agent pid xxx;
	// We need to parse out the environment variables from that.
	parts := strings.Split(string(vars), ";")
	env := []string{strings.TrimSpace(parts[0]), strings.TrimSpace(parts[2])}
	for _, keyPath := range paths {
		// we can be given literal paths to keys or paths to dirs
		// that are mounted from a secret, so we need to check which
		// we have
		if err := filepath.Walk(keyPath, func(path string, info os.FileInfo, err error) error {
			if strings.HasPrefix(info.Name(), "..") {
				// kubernetes volumes also include files we
				// should not look be looking into for keys
				if info.IsDir() {
					return filepath.SkipDir
				}
				return nil
			}
			if info.IsDir() {
				return nil
			}

			cmd := exec.Command("ssh-add", path)
			cmd.Env = append(cmd.Env, env...)
			if output, err := cmd.CombinedOutput(); err != nil {
				return fmt.Errorf("failed to add ssh key at %s: %v: %s", path, err, output)
			}
			logrus.Infof("Added SSH key at %s", path)
			return nil
		}); err != nil {
			return env, fmt.Errorf("error walking path %q: %v", keyPath, err)
		}
	}
	return env, nil
}
func addSSHKeys ( paths [ ] string ) ( [ ] string , error ) { vars , err := exec . Command ( " " ) . CombinedOutput ( ) if err != nil { return [ ] string { } , fmt . Errorf ( " " , err ) } logrus . Info ( " " ) // ssh-agent will output three lines of text, in the form: // SSH_AUTH_SOCK=xxx; export SSH_AUTH_SOCK; // SSH_AGENT_PID=xxx; export SSH_AGENT_PID; // echo Agent pid xxx; // We need to parse out the environment variables from that. parts := strings . Split ( string ( vars ) , " " ) env := [ ] string { strings . TrimSpace ( parts [ 0 ] ) , strings . TrimSpace ( parts [ 2 ] ) } for _ , keyPath := range paths { // we can be given literal paths to keys or paths to dirs // that are mounted from a secret, so we need to check which // we have if err := filepath . Walk ( keyPath , func ( path string , info os . FileInfo , err error ) error { if strings . HasPrefix ( info . Name ( ) , " " ) { // kubernetes volumes also include files we // should not look be looking into for keys if info . IsDir ( ) { return filepath . SkipDir } return nil } if info . IsDir ( ) { return nil } cmd := exec . Command ( " " , path ) cmd . Env = append ( cmd . Env , env ... ) if output , err := cmd . CombinedOutput ( ) ; err != nil { return fmt . Errorf ( " " , path , err , output ) } logrus . Infof ( " " , path ) return nil } ) ; err != nil { return env , fmt . Errorf ( " " , keyPath , err ) } } return env , nil }
// addSSHKeys will start the ssh-agent and add all the specified
// keys, returning the ssh-agent environment variables for reuse
addSSHKeys will start the ssh - agent and add all the specified keys returning the ssh - agent environment variables for reuse