我必须通过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>
。没有运气。
完成此操作的安全方法是什么?
答案 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