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{ diff --git a/website/source/docs/builders/vmware-iso.html.markdown b/website/source/docs/builders/vmware-iso.html.markdown index 97bb36aa1..469fdc4bc 100644 --- a/website/source/docs/builders/vmware-iso.html.markdown +++ b/website/source/docs/builders/vmware-iso.html.markdown @@ -187,6 +187,10 @@ builder. the remote machine. By default this is empty. This only has an effect if `remote_type` is enabled. +- `remote_private_key_file` (string) - The path to the PEM encoded private key + file for the user used to access the remote machine. By default this is empty. + This only has an effect if `remote_type` is enabled. + - `remote_type` (string) - The type of remote machine that will be used to build this VM rather than a local desktop product. The only value accepted for this currently is "esx5". If this is not set, a desktop product will @@ -398,6 +402,8 @@ modify as well: - `remote_password` - The SSH password for access to the remote machine. +- `remote_private_key_file` - The SSH key for access to the remote machine. + - `format` (string) - Either "ovf", "ova" or "vmx", this specifies the output format of the exported virtual machine. This defaults to "ovf". Before using this option, you need to install `ovftool`.