如何使用 lxc exc 作为特定用户发出多个命令

How to use lxc exc to issue multiple commands as specific user

我的目标是从 lxc 容器外部以 ubuntu 的形式在特定文件夹中执行两个命令。

我已经尝试了几件事,但我认为这个例子是我最接近工作的例子。

如果我运行

root@host$  lxc exec my-containter -- sudo --login --user ubuntu eval "cd /home/ubuntu/mydir && pwd && whoami && env && npm install && echo done"

我收到一个找不到模块的 npm 安装错误,但看起来我是正确的用户

但是,如果我分两步手动执行它,它确实有效...但我试图将其放入 bash 脚本中,以便我可以继续在主机上进行操作,所以我我觉得我需要它。

root@host$  lxc exec my-containter -- sudo --login --user ubuntu 
ubuntu@my-container$  eval "cd /home/ubuntu/mydir && pwd && whoami && env && npm install && echo done";

我发现我的 PATH 环境变量在这两种情况下是不同的,失败的是缺少 nvm/npm 的特定路径。我尝试在 eval 命令中导出它,但似乎已经找到了我可用的资源?我该怎么做才能使 PATH 变量在单行场景中以相同的方式填充?

来自 1 行的路径(非交互式)

PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/snap/bin:/snap/bin

来自 2 行的路径(交互式)

PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/.nvm/versions/node/v8.9.4/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin

我还注意到我的 .bashrc 文件底部有这个 nvm 代码。从我读到的内容来看,.bashrc 文件只能在交互模式下执行。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

下面的命令应该可以为您完成工作

lxc exec my-containter -- sudo --login --user ubuntu bash -ilc "cd /home/ubuntu/mydir && pwd && whoami && npm install && echo done"

.bashrc 文件顶部有下面

case $- in
    *i*) ;;
      *) return;;

此代码阻止 .bashrc 的其余部分在 non-interactive bash 的情况下执行。因此,要使其具有交互性,您应该添加 -i 标志