Skip to content

SCP in SSH proxy adapter does not handle spaces in filenames correctly #260

Description

@Jackenmen

Overview of the Issue

It appears that SDK's SSH proxy adapter (used, for example, by the Ansible plugin) does not handle spaces in filenames correctly resulting in exit code 1 from scp during the transfer. The build runs fine if the proxy is disabled.

Reproduction Steps

  1. Create a directory with build.sh with following contents:
#!/bin/bash

# cleanup previous run output
rm -f \
  example_file_with_no_spaces \
  'example file with spaces' \
  ssh_key \
  ssh_key.pub \
  meta-data \
  user-data \
  cidata.iso \
  playbook.yaml \
  repro.pkr.hcl
rm -rf output

# create files for the build
touch example_file_with_no_spaces
touch 'example file with spaces'
ssh-keygen -t rsa -q -f ssh_key -N '' -C 'packer'
echo '{}' > meta-data
echo "#cloud-config
users:
  - name: packer
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    ssh_authorized_keys:
      - $(cat ssh_key.pub)
" > user-data
genisoimage -output cidata.iso -input-charset utf-8 -volid cidata -rational-rock -joliet user-data meta-data
echo '- hosts: all
  tasks:
    - ansible.builtin.copy:
        src: example_file_with_no_spaces
        dest: /tmp/example1
    - ansible.builtin.copy:
        src: example file with spaces
        dest: /tmp/example2
' > playbook.yaml
echo 'packer {
  required_plugins {
    qemu = {
      version = "1.1.0"
      source  = "github.com/hashicorp/qemu"
    }
    ansible = {
      version = "1.1.1"
      source  = "github.com/hashicorp/ansible"
    }
  }
}

source "qemu" "ubuntu" {
  format               = "qcow2"
  disk_image           = true
  disk_size            = "10G"
  headless             = true
  iso_checksum         = "file:https://cloud-images.ubuntu.com/jammy/current/SHA256SUMS"
  iso_url              = "https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
  qemuargs             = [["-cdrom", "cidata.iso"]]
  ssh_username         = "packer"
  ssh_private_key_file = "ssh_key"
  vm_name              = "build.qcow2"
  output_directory     = "output"
}

build {
  sources = ["source.qemu.ubuntu"]

  provisioner "ansible" {
    playbook_file    = "playbook.yaml"
    ansible_env_vars = ["ANSIBLE_VERBOSITY=5", "ANSIBLE_DISPLAY_ARGS_TO_STDOUT=True"]
  }
}
' > repro.pkr.hcl

# run Packer
packer init repro.pkr.hcl
packer build repro.pkr.hcl
  1. Run the following commands:
chmod +x build.sh
./build.sh
  1. See the failure.

Note that as described, adding use_proxy = false to the Ansible provisioner results in a successful build.

Packer Plugin SDK version

0.5.1 (the version that the Packer Ansible plugin uses)

Operating system and Environment details

Packer ran from OS: Ubuntu Desktop 22.04.4 LTS x86_64
OS ran in Packer: Ubuntu Server 22.04.4 LTS x86_64

Log Fragments and crash.log files

https://gist.github.com/Jackenmen/bb97795a3e69709a1d7dda6cab75e07f

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions