When I run my Python application (that synchronizes a remote directory locally) I have a problem if the directory that contains my app has one or more spaces in its name.
Directory name appears in ssh options like "-o UserKnownHostsFile=<path>
" and "-i <path>
".
I try to double quote paths in my function that generates the command string, but nothing. I also try to replace spaces like this: path.replace(' ', '\\ ')
, but it doesn't work.
Note that my code works with dirnames without spaces.
The error returned by ssh is "garbage at the end of line" (code 12)
The command line generated seems ok..
rsync -rztv --delete --stats --progress --timeout=900 --size-only --dry-run \
-e 'ssh -o BatchMode=yes \
-o UserKnownHostsFile="/cygdrive/C/Users/my.user/my\ app/.ssh/known_hosts" \
-i "/cygdrive/C/Users/my.user/my\ app/.ssh/id_rsa"'
user@host:/home/user/folder/ "/cygdrive/C/Users/my.user/my\ app/folder/"
What am I doing wrong? Thank you!
Have you tried building your command as a list of arguments - I just had a similar problem passing a key file for the ssh connection:
command = [
"rsync",
"-rztv",
"--delete",
"--stats",
"--progress",
"--timeout=900",
"--size-only",
"--dry-run",
"-e",
"ssh -o BatchMode=yes -o UserKnownHostsFile='/cygdrive/C/Users/my.user/my\ app/.ssh/known_hosts' -i '/cygdrive/C/Users/my.user/my\ app/.ssh/id_rsa'",
"user@host:/home/user/folder/",
"/cygdrive/C/Users/my.user/my\ app/folder/"
]
sp = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = sp.communicate()[0]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With