栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ssh命令引用有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ssh命令引用有什么区别?

这里要理解的是,

ssh
只需将其参数串联起来(以相同的方式
$*
),然后将串联的字符串传递给
sh -c


因此,在以下情况下:

ssh josh-play bash -c 'cd /tmp; pwd'

… ssh运行:

sh -c 'bash -c cd /tmp; pwd'

…因此,sh运行:

bash -c cd /tmppwd

…并且您可以测试自己,

bash -c cd /tmp
没有做太多有用的事情(它运行的脚本文本仅由
cd
;
组成
/tmp
作为参数存储,但是脚本文本从不读取其参数,因此无济于事)。而且,一旦
bash
退出,我们就返回到父
sh
进程,该进程
cd
从未运行过。

传递给外壳程序的句法引号完全丢失,并且

pwd
不是由
bash
您手动触发的调用(在此用法中,该调用只是在
cd
没有任何参数的情况下调用了
/tmp
in)
$1
,而是作为参数传递给
cd
从不取消引用的脚本该变量),但由
sh
ssh隐式调用。


如果你知道你的遥控器

sh
是由bash或ksh的提供-壳配套的
$''
延伸-你可以做任意argv数组以下(在这种情况下
bash
-c
cd/tmp; pwd
):

# ask your shell to generate an eval-safe quoted form of your argument listprintf -v rmt_cmd '%q ' bash -c 'cd /tmp; pwd'# pass that through to be run by the remote sh -cssh josh-play "$rmt_cmd"

上面的警告是,如果您的参数列表可以包含换行符或隐藏的字符,则

printf %q
bash或ksh可以以不能保证POSIX
sh能够读取的形式对其进行转义。为了避免这种情况:

# ask your shell to generate an eval-safe quoted form of your argument listprintf -v rmt_cmd '%q ' bash -c 'cd /tmp; pwd'# ...and use bash to evaluate that quoted form.ssh josh-play 'exec bash -s' <<<"$rmt_cmd"


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号