ssh fra Linux til Windows - Hvorfor har så mange skråstreger i stien?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at køre kommandoer over ssh fra Linux-maskine til Windows-maskine.


Windows-maskine har OpenSSHx64 installeret


Følgende kommando med dobbelt citater fejler:


ssh user@win8-pc "ls -l \\172.21.15.120\vol0slash"

ls: cannot access 172.21.15.120vol0slash: No such file or directory


Den samme kommando med enkelte citater mislykkes stadig, men viser i det mindste enkelt skråstreg:


ssh user@win8-pc 'ls -l \\172.21.15.120\vol0slash'
ls: cannot access 172.21.15.120vol0slash: No such file or directory


Omgivende sti med enkelte citater virker næsten, men stadig mangler en rod skråstreg:


ssh user@win8-pc "ls -l '\\172.21.15.120\vol0slash'"
ls: cannot access 172.21.15.120vol0slash: No such file or directory


Nu endelig tilføje femte skråstreg til UNC sti rod gjorde tricket:


ssh user@win8-pc "ls -l '\\172.21.15.120\vol0slash'"
total 536
drwxr-xr-x 1 Admin Domain Users   0 Jan 23 08:33 GeneralSystemDiagnostic
drwxr-xr-x 1 Admin Domain Users   0 Jan 22 08:10 cifs
-rw-r--r-- 1 Admin Domain Users 336 Jan 23 12:00 linux.txt
drwxr-xr-x 1 Admin Domain Users   0 Jan 19 14:11 nfs


Kan nogen forklare logikken bag denne adfærd?

Bedste reference


Backslash er specielt symbol i bash og ret meget i alle Linux-skaller, derfor skal man undslippe med en anden (tilbageslag), hvis man skal bruge den. Kommandoen sendes gennem fjernbetjeningen bash som [21]


bash -c "ls -l '\\172.21.15.120\vol0slash'"


hvilke overførsler vurderer specialtegnene og gør det til at se ud


ls -l '\172.21.15.120vol0slash'


når det skal løbe


Problemet med at bruge ulige antal backslashes vil ende med at evaluere som et særligt tegn, så du skal gå med lige antal, hvis du vil se en tilbageslag i sidste ende.


Den anden ting er, hvordan argumenterne fortolkes af ls på Windows (som jeg ikke har nogen ide om). Se testene med enkle echo:


$ ssh f25 "echo '1'"
1
$ ssh f25 "echo '\1'"
1
$ ssh f25 "echo '\1'"
\1
$ ssh f25 "echo '\\1'"
\1


På samme måde kan du forklare den oprindelige kommando uden ':


ssh user@win8-pc "ls -l \\172.21.15.120\vol0slash"


får allerede i lokal shell (fordi den ikke er i ')


ssh user@win8-pc "ls -l \172.21.15.120vol0slash"


og fjernbetjeningen kommer allerede


bash -c "ls -l \172.21.15.120vol0slash"


som evaluerer til


bash -c "ls -l 172.21.15.120vol0slash"


og til


ls -l 172.21.15.120vol0slash


hvilket naturligvis ikke findes.