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 }