如何使用 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
标志
我的目标是从 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
标志