ssh和chroot后跟cd in shell

时间:2015-03-18 15:37:40

标签: shell unix ssh

如何在chroot到shell脚本中的远程节点之后执行cd命令?

对于前: 我需要这个。

ssh remote-node "chroot-path cd command here; extra commands"

没有chroot它工作正常,如果我把命令列表放在另一个shell脚本并在chroot之后执行shell脚本它似乎运行正常。

但是chroot好像打破了cd?

2 个答案:

答案 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中运行。

脚本是完成所需操作的最简单方法。