从Linux到Windows的ssh—为什么路径中需要这么多斜杠?

从Linux到Windows的ssh—为什么路径中需要这么多斜杠?,linux,windows,ssh,openssh,Linux,Windows,Ssh,Openssh,我正在尝试通过ssh从Linux机器运行命令到Windows机器 Windows计算机已安装OpenSSHx64 以下带双引号的命令失败: ssh user@win8-pc "ls -l \\\\172.21.15.120\\vol0slash" ls: cannot access 172.21.15.120vol0slash: No such file or directory 带单引号的同一命令仍然失败,但至少显示单斜杠: ssh user@win8-pc 'ls -l \\\\172.

我正在尝试通过ssh从Linux机器运行命令到Windows机器

Windows计算机已安装OpenSSHx64

以下带双引号的命令失败:

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

ls: cannot access 172.21.15.120vol0slash: No such file or directory
带单引号的同一命令仍然失败,但至少显示单斜杠:

ssh user@win8-pc 'ls -l \\\\172.21.15.120\\vol0slash'
ls: cannot access \172.21.15.120vol0slash: No such file or directory
使用单引号包围的路径几乎可以正常工作,但仍缺少一个根斜杠:

ssh user@win8-pc "ls -l '\\\\172.21.15.120\\vol0slash'"
ls: cannot access \172.21.15.120\vol0slash: No such file or directory
现在终于在UNC路径根中添加了第五个斜杠,实现了以下技巧:

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

有人能解释这种行为背后的逻辑吗?

反斜杠在bash中是一种特殊符号,在所有Linux shell中都是如此,因此,如果需要使用它,必须使用另一个\反斜杠对其进行转义。命令如下所示

它会计算特殊字符并使其看起来像

ls -l '\\\172.21.15.120\vol0slash'
当它应该运行时

使用奇数反斜杠的问题最终将作为一个特殊字符进行计算,因此如果希望在最后看到反斜杠,则应使用偶数

另一件事是ls在Windows上如何解释参数,我对此一无所知。请参阅使用简单回波的测试:

类似地,您可以解释原始命令,但不使用':

已在本地shell中获取,因为它不在'

远程shell已经得到了支持

bash -c "ls -l \\172.21.15.120\vol0slash"
评估结果是

bash -c "ls -l \172.21.15.120vol0slash"
以及

ls -l 172.21.15.120vol0slash
这显然是不存在的

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