GitLab Runner:在没有外壳的情况下切换用户后在服务器上执行代码
Posted
技术标签:
【中文标题】GitLab Runner:在没有外壳的情况下切换用户后在服务器上执行代码【英文标题】:GitLab Runner: Execute code on server after switching user without shell 【发布时间】:2020-07-29 11:42:10 【问题描述】:我正在尝试为 GitLab 项目设置自动部署。一旦更改合并到开发分支中,运行程序将登录服务器,切换到不同的用户,进入 web 目录,然后执行 git pull 以及其他一些任务。
如果您不熟悉 GitLab 运行器,它本质上只是一个临时服务器(docker 映像),可以执行您需要的任何操作。我只是用它来 ssh 到客户端服务器来执行我迄今为止为每次部署手动执行的命令,或者至少这是计划。
客户端服务器操作系统是 Ubuntu,我只能以 user 身份登录,为此我有一个 sudo pw,并且 specific-user 拥有该网站。
到目前为止,我已经能够通过 ssh 连接到所述服务器并进行设置,以便 user 可以切换到 specific-user 而无需手动输入 sudo密码。但这就是它结束的地方 - 我无法以 specific-user 身份实际执行任何命令。
这是我目前的代码 (.gitlab-ci.yml) 经过大量的反复试验和更多的谷歌搜索:
deploy_development:
type: deploy
environment:
name: development
url: https://website.com
script:
- ssh -tt user@server
"sudo su - specific-user -s /bin/bash &&
whoami &&
cd htdocs &&
git pull origin development"
only:
- development
GitLab 运行器输出如下:
$ ssh -tt user@server "sudo su - special-user -s /bin/bash && whoami && cd htdocs && git pull origin development"
Warning: Permanently added 'server, ip' (ECDSA) to the list of known hosts.
special-user@server:~$
...
三个点被动画化,大概表明终端正在等待输入。
注意:如果我使用“ssh”或“ssh -t”而不是“ssh -tt”,即使在使用 sudo su 之后我仍然是用户,因此无法执行任何代码为 特殊用户。
我必须做什么才能以其他用户的身份实际执行我的代码?
【问题讨论】:
【参考方案1】:与往常一样 - 一旦你将它发布到堆栈溢出,你就会找到答案..
我就是这样解决的:
script:
- ssh -tt user@server
"sudo -u special-user -H sh -c
'cd ~/htdocs &&
git pull origin development'"
【讨论】:
以上是关于GitLab Runner:在没有外壳的情况下切换用户后在服务器上执行代码的主要内容,如果未能解决你的问题,请参考以下文章