diff --git a/builder/vmware/iso/builder.go b/builder/vmware/iso/builder.go index 7958b5760..ddd7234c0 100755 --- a/builder/vmware/iso/builder.go +++ b/builder/vmware/iso/builder.go @@ -57,6 +57,7 @@ type Config struct { RemotePort uint `mapstructure:"remote_port"` RemoteUser string `mapstructure:"remote_username"` RemotePassword string `mapstructure:"remote_password"` + RemotePrivateKey string `mapstructure:"remote_private_key_file"` ctx interpolate.Context } diff --git a/builder/vmware/iso/driver.go b/builder/vmware/iso/driver.go index 2c6c7465d..ba96afe07 100644 --- a/builder/vmware/iso/driver.go +++ b/builder/vmware/iso/driver.go @@ -21,6 +21,7 @@ func NewDriver(config *Config) (vmwcommon.Driver, error) { Port: config.RemotePort, Username: config.RemoteUser, Password: config.RemotePassword, + PrivateKey: config.RemotePrivateKey, Datastore: config.RemoteDatastore, CacheDatastore: config.RemoteCacheDatastore, CacheDirectory: config.RemoteCacheDirectory, diff --git a/builder/vmware/iso/driver_esx5.go b/builder/vmware/iso/driver_esx5.go index e17dd7f69..ee8c5a647 100644 --- a/builder/vmware/iso/driver_esx5.go +++ b/builder/vmware/iso/driver_esx5.go @@ -15,6 +15,7 @@ import ( "time" "github.com/mitchellh/multistep" + commonssh "github.com/mitchellh/packer/common/ssh" "github.com/mitchellh/packer/communicator/ssh" "github.com/mitchellh/packer/packer" gossh "golang.org/x/crypto/ssh" @@ -27,6 +28,7 @@ type ESX5Driver struct { Port uint Username string Password string + PrivateKey string Datastore string CacheDatastore string CacheDirectory string @@ -340,7 +342,15 @@ func (d *ESX5Driver) connect() error { ssh.PasswordKeyboardInteractive(d.Password)), } - // TODO(dougm) KeyPath support + if d.PrivateKey != "" { + signer, err := commonssh.FileSigner(d.PrivateKey) + if err != nil { + return err + } + + auth = append(auth, gossh.PublicKeys(signer)) + } + sshConfig := &ssh.Config{ Connection: ssh.ConnectFunc("tcp", address), SSHConfig: &gossh.ClientConfig{