在 gitlab 管道中运行“sudo su”
Posted
技术标签:
【中文标题】在 gitlab 管道中运行“sudo su”【英文标题】:Running "sudo su" within a gitlab pipeline 【发布时间】:2022-01-20 00:40:09 【问题描述】:我已经在我的 gitlab 运行器 SSH 的服务器上安装了一些软件,并且需要在执行 sudo su
之后运行其中一个命令。如果我以普通用户身份运行它,但前面有sudo
- 它不起作用。我得先完全切换到sudo用户。
当我通过 SSH 连接到服务器并手动执行命令时,这可以正常工作。但是当我从管道中尝试时(下面的粗略代码):
my_script:
stage: stage
script:
- ssh -o -i id_rsa -tt user@1.1.1.1 << EOF
- sudo su
- run_special_command <blah blah>
- exit
# above exits from the SSH. below should stop the pipeline
- exit 0
- EOF
我得到如下非常奇怪的输出:
$ sudo su
[user@1.1.1.1 user]$ sudo su
echo $'\x1b[32;1m$ run_special_command <blah blah>\x1b[0;m'
run_special_command <blah blah>
echo $'\x1b[32;1m$ exit\x1b[0;m'
exit
echo $'\x1b[32;1m$ exit 0\x1b[0;m'
exit 0
echo $'\x1b[32;1m$ EOF\x1b[0;m'
而我看到的是它甚至根本不运行命令——我不知道为什么。
【问题讨论】:
在您的日常 shell 中,如果您将一系列命令链接在一起并在其中包含用户更改,我不希望命令的其余部分继续运行。我有一个预感 gitlab runner 遇到了同样的问题。您能否将特殊命令制作成将 setuid 位设置为 root 的标准脚本? 尝试在您的作业 YAML 中使您的脚本成为多行字符串。sudo -E <command>
也可以在这里代替sudo su
。
【参考方案1】:
在这种情况下,您需要将脚本作为多行字符串放入 YAML。或者,提交一个 shell 脚本来 repo 并执行它。
并且需要在执行 sudo su 之后运行其中一个命令。如果我以普通用户的身份运行它,但前面有 sudo - 它不起作用。
附带说明一下,您可以在命令前使用sudo -E
而不是sudo su
。但是你也应该使用多行脚本。
MyJob:
script: |
ssh -o -i id_rsa -tt user@host << EOF
sudo -E my_command
EOF
exit 0
或者,将您的脚本写入提交到存储库的 shell 脚本(设置可执行权限)并从您的作业中运行它:
MyJob:
script: “my_script.sh”
【讨论】:
以上是关于在 gitlab 管道中运行“sudo su”的主要内容,如果未能解决你的问题,请参考以下文章