在Azure Devops SSH任务中运行`sudo`命令的安​​全方法

时间:2019-09-12 09:34:30

标签: azure ssh azure-devops sudo

我必须通过Azure Devops发布管道在Azure VM中运行一些命令。我创建了user_group_password步骤,可以成功连接到远程VM。但是无法运行需要def render_layout if action_name == 'edit' def user_group UserGroup.find(user_group_id) end if user_group #Here user_group should be value of user_group_password 'main_layout' else 'some_other_layout' end else #here I should use the user_group method from application_controller def user_group super end end end 权限的命令。

SSH

sudo

我尝试了e.g systemctl restart <some service>。没有运气。

完成此操作的安全方法是什么?

3 个答案:

答案 0 :(得分:2)

我能够在ssh任务上运行sudo的唯一方法是将sudoer设置为root用户,而无需输入密码,因为您的代理可能会停留在STDIN中。 本文可能会有所帮助 https://www.shellhacks.com/how-to-grant-root-access-user-root-privileges-linux/

答案 1 :(得分:0)

这正是您所需要的,它可以在我的ubuntu服务器上的azure devops管道中使用:

https://serverfault.com/questions/772778/allowing-a-non-root-user-to-restart-a-service

天青管道中ssh任务的命令:

sudo systemctl restart <some service>

以及在linux机器中(以我的情况为ubuntu):

sudo visudo -f /etc/sudoers.d/90-clouding-ubuntu

添加这两行

Cmnd_Alias RESTART_SVC = /bin/systemctl restart <some service>
%<myuser> ALL=(ALL) NOPASSWD: RESTART_SVC

您必须输入正确的服务名称和正确的用户名(必须具有sudo的权限)。

答案 2 :(得分:0)

遇到了同样的问题,并找到了一种无需更改根特权的方法。 ssh脚本的问题是“代理卡在密码的STDIN中”。 像这样的脚本:

echo <password> | sudo -S service solr stop

在服务器上本地工作,但是代理仍然以某种方式停留在STDIN上。这是另一种解决方案。我在Posh-SSH中使用了Powershell脚本,而不是默认的ssh步骤。

首先,您需要在服务器上安装Posh-SSH: https://github.com/darkoperator/Posh-SSH 还有一个小型的YouTube教程。安装脚本为:

Install-Module -Name Posh-SSH -force
Get-Module -ListAvailable -Name Posh-SSH   
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Verbose 

您只需要运行一次。在您可以创建Powershell脚本并使用服务器进行SSHSession之后:

$pass="<password>"|ConvertTo-SecureString -AsPlainText -Force
$Cred = New-Object System.Management.Automation.PsCredential('<user>',$pass)
$session = New-SSHSession -Computername <Server> -Credential $Cred -Force

要测试您的连接,请执行以下操作:

Get-SSHSession  

现在您可以像这样运行脚本:

Invoke-SSHCommand -command "echo <password> | sudo -S service solr stop" -SessionId 0

最后关闭连接:

Remove-SSHSession 0