machine icon indicating copy to clipboard operation
machine copied to clipboard

docker-machine scp does not forward ports to virtualbox

Open Jared-Harrington-Gibbs opened this issue 7 years ago • 10 comments
trafficstars

@shin-

I pulled the new docker-machine RC manually as advised in #4388 but I am getting an error that is similar to what is reported in issue #4061.

The major difference being, I can connect via ssh but scp is not forwarding localhost:22 to the appropriate port on the vm when running docker-machine scp testfile default:/home/docker.

The debug log below confirms that the step of Forwarding(0)="ssh,tcp,127.0.0.1,49864,,22" is missing.

debug

Docker Machine Version:  0.14.0-rc1, build e918c74
Found binary path at C:\Program Files\Docker Toolbox\docker-machine.exe
Launching plugin server for driver virtualbox
Plugin server listening at address 127.0.0.1:49864
() Calling .GetVersion
Using API Version  1
() Calling .SetConfigRaw
() Calling .GetMachineName
(default) Calling .GetSSHPort
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHHostname
(default) Calling .GetSSHUsername
{C:\Program Files\Git\usr\bin\scp.exe [C:\Program Files\Git\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Port=49704 -o IdentityFile="C:\\Users\\admin\\.docker\\machine\\machines\\default\\id_rsa" test [email protected]:/home/docker] []  <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> <nil> false [] [] [] [] <nil> <nil>}
ssh: connect to host 127.0.0.1 port 22: Connection refused
lost connection
exit status 1

 

I can however run docker-machine ssh default without issue and it does forward the port.

debug

Docker Machine Version:  0.14.0-rc1, build e918c74
Found binary path at C:\Program Files\Docker Toolbox\docker-machine.exe
Launching plugin server for driver virtualbox
Plugin server listening at address 127.0.0.1:49874
() Calling .GetVersion
Using API Version  1
() Calling .SetConfigRaw
() Calling .GetMachineName
(default) Calling .GetState
(default) DBG | COMMAND: C:\Program Files\Oracle\VirtualBox\VBoxManage.exe showvminfo default --machinereadable
(default) DBG | STDOUT:
(default) DBG | {
(default) DBG | name="default"
(default) DBG | groups="/"
(default) DBG | ostype="Linux 2.6 / 3.x / 4.x (64-bit)"
(default) DBG | UUID="38faa80d-b4fe-42cb-8076-d641008d3b7d"
(default) DBG | CfgFile="C:\\Users\\admin\\.docker\\machine\\machines\\default\\default\\default.vbox"
(default) DBG | SnapFldr="C:\\Users\\admin\\.docker\\machine\\machines\\default\\default\\Snapshots"
(default) DBG | LogFldr="C:\\Users\\admin\\.docker\\machine\\machines\\default\\default\\Logs"
(default) DBG | hardwareuuid="38faa80d-b4fe-42cb-8076-d641008d3b7d"
(default) DBG | memory=1024
(default) DBG | pagefusion="off"
(default) DBG | vram=8
(default) DBG | cpuexecutioncap=100
(default) DBG | hpet="on"
(default) DBG | chipset="piix3"
(default) DBG | firmware="BIOS"
(default) DBG | cpus=1
(default) DBG | pae="on"
(default) DBG | longmode="on"
(default) DBG | triplefaultreset="off"
(default) DBG | apic="on"
(default) DBG | x2apic="off"
(default) DBG | cpuid-portability-level=0
(default) DBG | bootmenu="disabled"
(default) DBG | boot1="dvd"
(default) DBG | boot2="dvd"
(default) DBG | boot3="disk"
(default) DBG | boot4="none"
(default) DBG | acpi="on"
(default) DBG | ioapic="on"
(default) DBG | biosapic="apic"
(default) DBG | biossystemtimeoffset=0
(default) DBG | rtcuseutc="on"
(default) DBG | hwvirtex="on"
(default) DBG | nestedpaging="on"
(default) DBG | largepages="on"
(default) DBG | vtxvpid="on"
(default) DBG | vtxux="on"
(default) DBG | paravirtprovider="default"
(default) DBG | effparavirtprovider="kvm"
(default) DBG | VMState="running"
(default) DBG | VMStateChangeTime="2018-03-01T02:41:50.379000000"
(default) DBG | monitorcount=1
(default) DBG | accelerate3d="off"
(default) DBG | accelerate2dvideo="off"
(default) DBG | teleporterenabled="off"
(default) DBG | teleporterport=0
(default) DBG | teleporteraddress=""
(default) DBG | teleporterpassword=""
(default) DBG | tracing-enabled="off"
(default) DBG | tracing-allow-vm-access="off"
(default) DBG | tracing-config=""
(default) DBG | autostart-enabled="off"
(default) DBG | autostart-delay=0
(default) DBG | defaultfrontend=""
(default) DBG | storagecontrollername0="SATA"
(default) DBG | storagecontrollertype0="IntelAhci"
(default) DBG | storagecontrollerinstance0="0"
(default) DBG | storagecontrollermaxportcount0="30"
(default) DBG | storagecontrollerportcount0="30"
(default) DBG | storagecontrollerbootable0="on"
(default) DBG | "SATA-0-0"="C:\Users\admin\.docker\machine\machines\default\boot2docker.iso"
(default) DBG | "SATA-ImageUUID-0-0"="07cacd0b-499a-4e4d-b684-3bd7dcf36bec"
(default) DBG | "SATA-tempeject"="off"
(default) DBG | "SATA-IsEjected"="off"
(default) DBG | "SATA-1-0"="C:\Users\admin\.docker\machine\machines\default\disk.vmdk"
(default) DBG | "SATA-ImageUUID-1-0"="31912da0-e611-48c3-8ac8-219f1d88b681"
(default) DBG | "SATA-2-0"="none"
(default) DBG | "SATA-3-0"="none"
(default) DBG | "SATA-4-0"="none"
(default) DBG | "SATA-5-0"="none"
(default) DBG | "SATA-6-0"="none"
(default) DBG | "SATA-7-0"="none"
(default) DBG | "SATA-8-0"="none"
(default) DBG | "SATA-9-0"="none"
(default) DBG | "SATA-10-0"="none"
(default) DBG | "SATA-11-0"="none"
(default) DBG | "SATA-12-0"="none"
(default) DBG | "SATA-13-0"="none"
(default) DBG | "SATA-14-0"="none"
(default) DBG | "SATA-15-0"="none"
(default) DBG | "SATA-16-0"="none"
(default) DBG | "SATA-17-0"="none"
(default) DBG | "SATA-18-0"="none"
(default) DBG | "SATA-19-0"="none"
(default) DBG | "SATA-20-0"="none"
(default) DBG | "SATA-21-0"="none"
(default) DBG | "SATA-22-0"="none"
(default) DBG | "SATA-23-0"="none"
(default) DBG | "SATA-24-0"="none"
(default) DBG | "SATA-25-0"="none"
(default) DBG | "SATA-26-0"="none"
(default) DBG | "SATA-27-0"="none"
(default) DBG | "SATA-28-0"="none"
(default) DBG | "SATA-29-0"="none"
(default) DBG | natnet1="nat"
(default) DBG | macaddress1="080027105F6C"
(default) DBG | cableconnected1="on"
(default) DBG | nic1="nat"
(default) DBG | nictype1="82540EM"
(default) DBG | nicspeed1="0"
(default) DBG | mtu="0"
(default) DBG | sockSnd="64"
(default) DBG | sockRcv="64"
(default) DBG | tcpWndSnd="64"
(default) DBG | tcpWndRcv="64"
(default) DBG | Forwarding(0)="ssh,tcp,127.0.0.1,49704,,22" 
(default) DBG | hostonlyadapter2="VirtualBox Host-Only Ethernet Adapter #2"
(default) DBG | macaddress2="0800270D36A6"
(default) DBG | cableconnected2="on"
(default) DBG | nic2="hostonly"
(default) DBG | nictype2="82540EM"
(default) DBG | nicspeed2="0"
(default) DBG | nic3="none"
(default) DBG | nic4="none"
(default) DBG | nic5="none"
(default) DBG | nic6="none"
(default) DBG | nic7="none"
(default) DBG | nic8="none"
(default) DBG | hidpointing="ps2mouse"
(default) DBG | hidkeyboard="ps2kbd"
(default) DBG | uart1="off"
(default) DBG | uart2="off"
(default) DBG | uart3="off"
(default) DBG | uart4="off"
(default) DBG | lpt1="off"
(default) DBG | lpt2="off"
(default) DBG | audio="dsound"
(default) DBG | audio_in="false"
(default) DBG | audio_out="false"
(default) DBG | clipboard="disabled"
(default) DBG | draganddrop="disabled"
(default) DBG | SessionName="headless"
(default) DBG | VideoMode="720,400,0"@0,0 1
(default) DBG | vrde="off"
(default) DBG | usb="off"
(default) DBG | ehci="off"
(default) DBG | xhci="off"
(default) DBG | SharedFolderNameMachineMapping1="c/Users"
(default) DBG | SharedFolderPathMachineMapping1="\\?\c:\Users"
(default) DBG | VRDEActiveConnection="off"
(default) DBG | VRDEClients=0
(default) DBG | videocap="off"
(default) DBG | videocap_audio="off"
(default) DBG | videocapscreens=0
(default) DBG | videocapfile="C:\Users\admin\.docker\machine\machines\default\default\default.webm"
(default) DBG | videocapres=1024x768
(default) DBG | videocaprate=512
(default) DBG | videocapfps=25
(default) DBG | videocapopts=
(default) DBG | GuestMemoryBalloon=0
(default) DBG | GuestOSType="Linux26_64"
(default) DBG | GuestAdditionsRunLevel=2
(default) DBG | GuestAdditionsVersion="5.2.2 r119230"
(default) DBG | GuestAdditionsFacility_VirtualBox Base Driver=50,1519872147340
(default) DBG | GuestAdditionsFacility_VirtualBox System Service=50,1519872168548
(default) DBG | GuestAdditionsFacility_Seamless Mode=0,1519872147339
(default) DBG | GuestAdditionsFacility_Graphics Mode=0,1519872147339
(default) DBG | }
(default) DBG | STDERR:
(default) DBG | {
(default) DBG | }
(default) Calling .GetSSHHostname
(default) Calling .GetSSHPort
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHKeyPath
(default) Calling .GetSSHUsername
Using SSH client type: external
&{[-F /dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none [email protected] -o IdentitiesOnly=yes -i C:\Users\admin\.docker\machine\machines\default\id_rsa -p 49704] C:\Program Files\Git\usr\bin\ssh.exe }
&{C:\Program Files\Git\usr\bin\ssh.exe [C:\Program Files\Git\usr\bin\ssh.exe -F /dev/null -o PasswordAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=none [email protected] -o IdentitiesOnly=yes -i C:\Users\admin\.docker\machine\machines\default\id_rsa -p 49704] []     []      false [] [] [] []  }

Jared-Harrington-Gibbs avatar Mar 01 '18 03:03 Jared-Harrington-Gibbs

Addition:

I might have found the cause and have also reproduced this issue when trying to scp to an amazon instance

VirtualBox Test

Running the regular command fails.

 docker-machine --debug scp test default: 

Running the command shown at the end of the debug log fails.

C:\Program Files\Git\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Port=49704 -o IdentityFile="C:\\Users\\admin\\.docker\\machine\\machines\\default\\id_rsa" test [email protected]:/home/docker

Add quotes around the directory to scp and the debug command works.

"C:\Program Files\Git\usr\bin\scp.exe" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Port=49704 -o IdentityFile="C:\\Users\\admin\\.docker\\machine\\machines\\default\\id_rsa" test [email protected]:/home/docker 

 

EC2 test

Running the regular command fails with "Permission denied (publickey)". docker-machine --debug scp test ubuntu@ec2-docker-host:/home/ubuntu

Running the command shown at the end of the debug log fails.

 C:\Program Files\Git\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Port=
22 -o IdentityFile="C:\\Users\\admin\\.docker\\machine\\machines\\ec2-docker-host\\id_rsa" test [email protected]:/home/ubuntu 

Add quotes around the directory to scp and the debug command works.

 "C:\Program Files\Git\usr\bin\scp.exe" -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Por
t=22 -o IdentityFile="C:\\Users\\admin\\.docker\\machine\\machines\\ec2-docker-host\\id_rsa" test [email protected]:/home/ubuntu 

Debug

Docker Machine Version:  0.14.0-rc1, build e918c74
Found binary path at C:\Program Files\Docker Toolbox\docker-machine.exe
Launching plugin server for driver amazonec2
Plugin server listening at address 127.0.0.1:50711
() Calling .GetVersion
Using API Version  1
() Calling .SetConfigRaw
() Calling .GetMachineName
(ec2-docker-host) Calling .GetSSHPort
(ec2-docker-host) Calling .GetSSHKeyPath
(ec2-docker-host) Calling .GetSSHKeyPath
(ec2-docker-host) Calling .GetSSHKeyPath
(ec2-docker-host) Calling .GetSSHHostname
(ec2-docker-host) DBG | 2018/02/28 19:59:56 DEBUG: Request ec2/DescribeInstances Details:
(ec2-docker-host) DBG | ---[ REQUEST POST-SIGN ]-----------------------------
(ec2-docker-host) DBG | POST / HTTP/1.1
(ec2-docker-host) DBG | Host: ec2.us-west-2.amazonaws.com
(ec2-docker-host) DBG | User-Agent: aws-sdk-go/1.4.10 (go1.8.3; windows; amd64)
(ec2-docker-host) DBG | Content-Length: 76
(ec2-docker-host) DBG | Authorization: AWS4-HMAC-SHA256

(ec2-docker-host) DBG | -----------------------------------------------------
{C:\Program Files\Git\usr\bin\scp.exe [C:\Program Files\Git\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Port=22 -o IdentityFile="C:\\Users\\admin\\.docker\\machine\\machines\\ec2-docker-host\\id_rsa" test [email protected]:/home/ubuntu] []     []      false [] [] [] []  }

Permission denied (publickey).
lost connection
exit status 1

Jared-Harrington-Gibbs avatar Mar 01 '18 04:03 Jared-Harrington-Gibbs

@shin-

docker-machine does not seem to be escaping the slashes and spaces in the binary path. Any idea on why this is still happening?

Jared-Harrington-Gibbs avatar Mar 01 '18 15:03 Jared-Harrington-Gibbs

docker-machine does not seem to be escaping the slashes and spaces in the binary path. Any idea on why this is still happening?

@shin-

something indeed needs to be escaped properly

> docker-machine scp .\README.md somemachine:/tmp
Files/OpenSSH-Win64/scp.exe: No such file or directory
C:/Program: No such file or directory
Files/OpenSSH-Win64/scp.exe: No such file or directory
-o: No such file or directory
StrictHostKeyChecking=no: No such file or directory
-o: No such file or directory
UserKnownHostsFile=/dev/null: No such file or directory
-o: No such file or directory
LogLevel=quiet: No such file or directory
-3: No such file or directory
-o: No such file or directory
IdentitiesOnly=yes: No such file or directory
-o: No such file or directory
Port=22: No such file or directory
-o: No such file or directory
ssh.exe: Could not resolve hostname identityfile=c: No such host is known.
README.md                                                                   100%  708     0.7KB/s   00:00
exit status 1

princemaple avatar Mar 27 '18 22:03 princemaple

@shin- This buggy version is now in the latest release of Docker Toolbox!

drnybble avatar Jul 04 '18 12:07 drnybble

Faced this issue today when testing our setup scripts with docker-machine 0.14. To resolve this issue I wrote some hacky workaroud. Might help someone(requires scp on path):

scp=$(docker-machine --debug scp bootlocal.sh default:~/bootlocal.sh 2>&1)
SCP_FAILED_CODE=$?
if [ "$SCP_FAILED_CODE" -eq 1 ]; then
    scp=$(echo $scp | grep scp | grep -o -P "scp.exe -o .*bootlocal.sh")
    eval $scp
else
    echo $scp
fi

Koriit avatar Jul 13 '18 15:07 Koriit

Any updates on this? I am facing the same problem.

mangei avatar Aug 09 '18 13:08 mangei

Docker Toolbox 18.09 released and still has this problem!

drnybble avatar Nov 23 '18 15:11 drnybble

More general workaround

function myscp() {
	src=$1
	dst=$2
	sshport=$(docker-machine inspect --format {{.Driver.SSHPort}} ${DOCKER_MACHINE_NAME})
	sshkeypath=$(docker-machine inspect --format {{.Driver.SSHKeyPath}} ${DOCKER_MACHINE_NAME})
	
	scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -o IdentitiesOnly=yes -o Port=${sshport} -o IdentityFile="${sshkeypath}" "${src}" "[email protected]:${dst}" 
}

drnybble avatar Nov 23 '18 16:11 drnybble

This Problem also exists on docker-machine version 0.16.1 on windows with AWS

λ docker-machine --debug scp -r folder/ ubuntu@prometheus-monitoring:/home/ubuntu Checking=no -o User
Docker Machine Version:  0.16.1, build cce350d7
Found binary path at C:\Program Files\Docker\Docker\Resources\bin\docker-machine.exe
Launching plugin server for driver amazonec2
Plugin server listening at address 127.0.0.1:51077
() Calling .GetVersion
Using API Version  1
() Calling .SetConfigRaw
() Calling .GetMachineName
(prometheus-monitoring) Calling .GetSSHPort
(prometheus-monitoring) Calling .GetSSHKeyPath
(prometheus-monitoring) Calling .GetSSHKeyPath
(prometheus-monitoring) Calling .GetSSHKeyPath
(prometheus-monitoring) Calling .GetSSHHostname
{C:\_Work\apps\cmder\vendor\git-for-windows\usr\bin\scp.exe [C:\_Work\apps\cmder\vendor\git-for-windows\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -r -o IdentitiesOnly=yes -o Port=22 -o IdentityFile="C:\\Users\\SebastianDechant\\.docker\\machine\\machines\\prometheus-monitoring\\id_rsa" folder/ [email protected]:/home/ubuntu] []  <nil> <nil> <nil> [] <nil> <nil> <nil> <nil> <nil> false [] [] [] [] <nil> <nil>}
[email protected]: Permission denied (publickey).
lost connection
exit status 1

When calling now C:\_Work\apps\cmder\vendor\git-for-windows\usr\bin\scp.exe -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -3 -r -o IdentitiesOnly=yes -o Port=22 -o IdentityFile="C:\\Users\\SebastianDechant\\.docker\\machine\\machines\\prometheus-monitoring\\id_rsa" folder/ [email protected]:/home/ubuntu

directly it works fine

S3bb1 avatar Jan 22 '19 06:01 S3bb1

Seeing the same issue...

bazzilic avatar May 06 '21 11:05 bazzilic