如何在chroot到shell脚本中的远程节点之后执行cd命令?
对于前: 我需要这个。
ssh remote-node "chroot-path cd command here; extra commands"
没有chroot它工作正常,如果我把命令列表放在另一个shell脚本并在chroot之后执行shell脚本它似乎运行正常。
但是chroot好像打破了cd?
答案 0 :(得分:1)
使用printf %q
让您的本地shell(必须是bash)为您提供正确的引用,并bash -c
显式调用与该引用兼容的远程shell(如%q
可以在chroot
下生成包含特殊字符的输入字符串的仅bash引用。
cmd_str='cd /to/place; extra commands'
remote_command=( bash -c "$cmd_str" )
printf -v remote_command_str '%q ' "${remote_command[@]}"
ssh remote-node "chroot /path/here $remote_command_str"
bash -c
是必要的,因为cd
是一个shell构造,chroot
默认情况下直接执行其参数(没有shell)。
printf %q
的{{1}}和正确(单引号)引用确保命令字符串由最终shell(在chroot下调用的cmd_str
)执行,而不是您的本地shell,而不是远程预先chroot shell。
答案 1 :(得分:0)
假设chroot-path
代表chroot /some/root/path
。
chroot
只接受一个命令,而cd
不是一个命令,它是一个内置的shell,因此不起作用。
此外,cd command here
设置下只有chroot
正在运行(或尝试)。 ;
之后的所有内容都在主shell中运行。
脚本是完成所需操作的最简单方法。