【问题标题】:ssh and chroot followed by cd in shellssh 和 chroot 后跟 shell 中的 cd
【发布时间】:2015-03-18 15:37:40
【问题描述】:

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

例如: 我需要这个。

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

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

但是 chroot 似乎破坏了 cd?

【问题讨论】:

  • 这是什么chroot-path 命令?

标签: shell unix ssh


【解决方案1】:

使用printf %q 让您的本地shell(必须是bash)为您提供正确的引用,并使用bash -c 显式调用与该引用兼容的远程shell(因为%q 可以生成仅限bash 的引用chroot 下的输入字符串)。

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 %qcmd_str 的正确(单引号)引用确保命令字符串由最终 shell(在 chroot 下调用的 bash -c)执行,而不是由本地 shell,而不是由远程 pre-chroot shell。

【讨论】:

    【解决方案2】:

    假设chroot-path 是指chroot /some/root/path

    chroot 只接受一个命令,而cd 不是命令,它是内置的 shell,因此无法使用。

    此外,只有cd command herechroot 设置下运行(或尝试运行)。 ; 之后的所有内容都在主 shell 中运行。

    脚本是做你想做的最简单的方法。

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      • 2020-04-24
      • 2012-04-13
      相关资源
      最近更新 更多