Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure Devops SSH任务中运行'sudo'命令的安全方法_Azure_Ssh_Azure Devops_Sudo - Fatal编程技术网

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

在Azure Devops SSH任务中运行'sudo'命令的安全方法,azure,ssh,azure-devops,sudo,Azure,Ssh,Azure Devops,Sudo,我必须通过Azure Devops发布管道在Azure VM中运行一些命令。我创建了SSH步骤,可以成功连接到远程VM。但在运行需要sudo权限的命令时遇到问题 例如系统CTL重启 我尝试了echo | sudo-S systemctl restart。不走运 实现这一点的安全方法是什么?我能够通过ssh运行sudo任务的唯一方法是将sudoer设置为root member,而不为我设置密码,因为您的代理可能会卡在STDIN中。 这篇文章可能会有所帮助 这正是您所需要的,它在我的ubuntu服务

我必须通过Azure Devops发布管道在Azure VM中运行一些命令。我创建了
SSH
步骤,可以成功连接到远程VM。但在运行需要
sudo
权限的命令时遇到问题

例如系统CTL重启

我尝试了
echo | sudo-S systemctl restart
。不走运


实现这一点的安全方法是什么?

我能够通过ssh运行sudo任务的唯一方法是将sudoer设置为root member,而不为我设置密码,因为您的代理可能会卡在STDIN中。 这篇文章可能会有所帮助

这正是您所需要的,它在我的ubuntu服务器上的azure devops管道中工作:


azure管道中ssh任务的命令:

sudo systemctl restart <some service>
把这两行加起来

Cmnd_Alias RESTART_SVC = /bin/systemctl restart <some service>
%<myuser> ALL=(ALL) NOPASSWD: RESTART_SVC
Cmnd\u别名重启\u SVC=/bin/systemctl重启
%ALL=(ALL)NOPASSWD:重新启动\u SVC

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

也有同样的问题,并且找到了一种不更改根权限的方法。我对ssh脚本的问题是“代理在密码的STDIN中阻塞”。 像这样的脚本:

echo <password> | sudo -S service solr stop
你只需要运行一次。在创建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
现在您可以像这样运行脚本:

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

您看到的错误是什么?更新了问题并提供了更多详细信息。
Install-Module -Name Posh-SSH -force
Get-Module -ListAvailable -Name Posh-SSH   
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Force -Verbose 
$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