我正在尝试将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
任何人都可以解释这种行为背后的逻辑吗?
答案 0 :(得分:1)
反斜杠是bash
中的特殊符号,在所有Linux shell中都是如此,因此如果您需要使用它,则必须使用另一个\
(反斜杠)进行转义。命令为passed through the remote bash
,例如
bash -c "ls -l '\\\\\172.21.15.120\\vol0slash'"
哪些传输会评估特殊字符并使其看起来像
ls -l '\\\172.21.15.120\vol0slash'
当它应该运行时。
使用奇数个反斜杠的问题最终将作为一个特殊字符进行评估,所以如果你想在最后看到一个反斜杠,你应该使用偶数。
另一件事是Windows上ls
如何解释参数(我不知道)。请参阅简单echo
的测试:
$ ssh f25 "echo '\1'"
\1
$ ssh f25 "echo '\\1'"
\1
$ ssh f25 "echo '\\\1'"
\\1
$ ssh f25 "echo '\\\\1'"
\\1
同样,您可以在没有'
的情况下解释原始命令:
ssh user@win8-pc "ls -l \\\\172.21.15.120\\vol0slash"
已经在本地shell中(因为它不在'
)
ssh user@win8-pc "ls -l \\172.21.15.120\vol0slash"
并且远程shell已经
bash -c "ls -l \\172.21.15.120\vol0slash"
评估为
bash -c "ls -l \172.21.15.120vol0slash"
和
ls -l 172.21.15.120vol0slash
显然不存在。