ssh quoting.

2021-06-12 18:53:23

一段时间后,我们的一个公司邮件列表中有一个关于ssh引用的线程,我发布了很长的答案。从那时起,一些人曾屈服于我的问题,让我伸展到它,所以如果我要匿名这个原始问题并在这里发布我的答案,我也可能是顾问。

问题是为什么涉及SSH和Fiddlyquoting的一系列命令产生了他们所做的输出。第一个例子是:

哦,嗨,我可疑的生活选择是这样的,这是我的专业主题!

首先,回想一下,您的本地shell将应用其常用的解析,并且TheAtual OS级执行SSH将是这样的:

现在,SSH线协议只需要一个字符串作为命令,期望它应该通过远程端传递给shell。 Theopenssh客户通过在优惠选项和目标之后占据所有参数来处理这一点,在这种情况下是:

这将作为一个字符串传递给服务器,然后将entirestring传递给shell以进行评估,因此您可以直接在服务器上键入:

因此,该目录更改在子屏幕中发生(实际上它没有quiteeven,因为bash -lc cd / tmp实际上最终会调用bash -c解析多个参数的方式的cdeause),然后thatsubshel​​l退出,然后pwd在外壳中调用仍有理想的工作目录。

在上面的逻辑之后,这已最终好像您在服务器上运行此操作:

现在,我不会以这种方式实现SSH客户端,因为我达成协议。但是/ usr / bin / ssh被用作以其他方式用于其他方式,即改变其行为现在将是巨大的,所以可能无法修复。 (我偶尔在OpenSsh-Unix-Dev @上至少记录这个更好,但尚未做出很大的始终;我需要绕过准备Adocumentation补丁。)但是,一旦你知道它,就可以使用occribing。在这种情况下,这将只是:

或者如果您确实需要专门调用BASH -L以某种原因(我假设原始示例从MoreComplate的某些东西减少),那么您可以通过将与您想要的表单中的单个字符串传递为单个字符串来最小化您的混淆远程SH -C查看,INA的方法可以确保报价保存并发送到ServerRather而不是由本地shell删除: