github.com/StackPointCloud/packer@v0.10.2-0.20180716202532-b28098e0f79b/builder/docker/comm.go (about)

     1  package docker
     2  
     3  import (
     4  	"fmt"
     5  	"io/ioutil"
     6  
     7  	"github.com/hashicorp/packer/communicator/ssh"
     8  	"github.com/hashicorp/packer/helper/communicator"
     9  	"github.com/hashicorp/packer/helper/multistep"
    10  	gossh "golang.org/x/crypto/ssh"
    11  )
    12  
    13  func commHost(state multistep.StateBag) (string, error) {
    14  	containerId := state.Get("container_id").(string)
    15  	driver := state.Get("driver").(Driver)
    16  	return driver.IPAddress(containerId)
    17  }
    18  
    19  func sshConfig(comm *communicator.Config) func(state multistep.StateBag) (*gossh.ClientConfig, error) {
    20  	return func(state multistep.StateBag) (*gossh.ClientConfig, error) {
    21  		if comm.SSHPrivateKey != "" {
    22  			// key based auth
    23  			bytes, err := ioutil.ReadFile(comm.SSHPrivateKey)
    24  			if err != nil {
    25  				return nil, fmt.Errorf("Error setting up SSH config: %s", err)
    26  			}
    27  			privateKey := string(bytes)
    28  
    29  			signer, err := gossh.ParsePrivateKey([]byte(privateKey))
    30  			if err != nil {
    31  				return nil, fmt.Errorf("Error setting up SSH config: %s", err)
    32  			}
    33  
    34  			return &gossh.ClientConfig{
    35  				User: comm.SSHUsername,
    36  				Auth: []gossh.AuthMethod{
    37  					gossh.PublicKeys(signer),
    38  				},
    39  				HostKeyCallback: gossh.InsecureIgnoreHostKey(),
    40  			}, nil
    41  		} else {
    42  			// password based auth
    43  			return &gossh.ClientConfig{
    44  				User: comm.SSHUsername,
    45  				Auth: []gossh.AuthMethod{
    46  					gossh.Password(comm.SSHPassword),
    47  					gossh.KeyboardInteractive(
    48  						ssh.PasswordKeyboardInteractive(comm.SSHPassword)),
    49  				},
    50  				HostKeyCallback: gossh.InsecureIgnoreHostKey(),
    51  			}, nil
    52  		}
    53  	}
    54  }