github.com/rothwerx/packer@v0.9.0/builder/parallels/common/ssh.go (about)

     1  package common
     2  
     3  import (
     4  	"github.com/mitchellh/multistep"
     5  	commonssh "github.com/mitchellh/packer/common/ssh"
     6  	packerssh "github.com/mitchellh/packer/communicator/ssh"
     7  	"golang.org/x/crypto/ssh"
     8  )
     9  
    10  func CommHost(state multistep.StateBag) (string, error) {
    11  	vmName := state.Get("vmName").(string)
    12  	driver := state.Get("driver").(Driver)
    13  
    14  	mac, err := driver.Mac(vmName)
    15  	if err != nil {
    16  		return "", err
    17  	}
    18  
    19  	ip, err := driver.IpAddress(mac)
    20  	if err != nil {
    21  		return "", err
    22  	}
    23  
    24  	return ip, nil
    25  }
    26  
    27  func SSHConfigFunc(config SSHConfig) func(multistep.StateBag) (*ssh.ClientConfig, error) {
    28  	return func(state multistep.StateBag) (*ssh.ClientConfig, error) {
    29  		auth := []ssh.AuthMethod{
    30  			ssh.Password(config.Comm.SSHPassword),
    31  			ssh.KeyboardInteractive(
    32  				packerssh.PasswordKeyboardInteractive(config.Comm.SSHPassword)),
    33  		}
    34  
    35  		if config.Comm.SSHPrivateKey != "" {
    36  			signer, err := commonssh.FileSigner(config.Comm.SSHPrivateKey)
    37  			if err != nil {
    38  				return nil, err
    39  			}
    40  
    41  			auth = append(auth, ssh.PublicKeys(signer))
    42  		}
    43  
    44  		return &ssh.ClientConfig{
    45  			User: config.Comm.SSHUsername,
    46  			Auth: auth,
    47  		}, nil
    48  	}
    49  }