github.com/askholme/packer@v0.7.2-0.20140924152349-70d9566a6852/builder/virtualbox/common/ssh.go (about) 1 package common 2 3 import ( 4 "fmt" 5 6 gossh "code.google.com/p/go.crypto/ssh" 7 "github.com/mitchellh/multistep" 8 commonssh "github.com/mitchellh/packer/common/ssh" 9 "github.com/mitchellh/packer/communicator/ssh" 10 ) 11 12 func SSHAddress(state multistep.StateBag) (string, error) { 13 sshHostPort := state.Get("sshHostPort").(uint) 14 return fmt.Sprintf("127.0.0.1:%d", sshHostPort), nil 15 } 16 17 func SSHConfigFunc(config SSHConfig) func(multistep.StateBag) (*gossh.ClientConfig, error) { 18 return func(state multistep.StateBag) (*gossh.ClientConfig, error) { 19 auth := []gossh.AuthMethod{ 20 gossh.Password(config.SSHPassword), 21 gossh.KeyboardInteractive( 22 ssh.PasswordKeyboardInteractive(config.SSHPassword)), 23 } 24 25 if config.SSHKeyPath != "" { 26 signer, err := commonssh.FileSigner(config.SSHKeyPath) 27 if err != nil { 28 return nil, err 29 } 30 31 auth = append(auth, gossh.PublicKeys(signer)) 32 } 33 34 return &gossh.ClientConfig{ 35 User: config.SSHUser, 36 Auth: auth, 37 }, nil 38 } 39 }