一点背景: 我有一个 gradle 脚本,用于在许多不同的机器上安装和设置多个软件 - 我在本地运行它以加速部署过程。 gradle 脚本获取图层和服务器名称作为参数,并将通过执行远程 ssh linux 命令 (rhel 6) 安装软件。
C:\work\source\tools\environment-tools>gradle -Player=service -Pserver=demo1 installSamba
Using libraries from: C:\work\source/lib
:installSamba
Trying to override old definition of datatype scp
Trying to override old definition of datatype sshexec
--- Executing: yes | yum install samba
--- failOnError = false, using sudo
>>>>>
Command: echo 'sudo_pass' | sudo -Ss 'yes | yum install samba'
[sudo] password for root:
/bin/bash: yes | yum install samba: command not found
[ant:sshexec] Remote command failed with exit status 127
我正在尝试执行的命令:简单地使用 yum 安装 samba,但也会触发 yes 以自动执行默认的 samba 安装。
问题: 当我执行脚本时,会远程执行以下命令来安装 samba: 回声 'sudo_pass' | sudo -Ss '是的 | yum 安装 samba'
为什么当下面的代码完美执行时会失败(但需要人工交互,即按 y 然后返回): 回声 'sudo_pass' | sudo -Ss yum 安装 samba
我想我需要正确设置以下小型 gradle 安装脚本:知道我做错了什么吗?
task installSamba << {
forAllServers { props ->
ssh('yes | yum install samba', props)
}
}
最佳答案
我后来发现,为了执行像上面那样的 gradle 脚本,必须在远程机器上降级 sudo。我所做的降级是从版本:1.7.4p5 到 sudo 版本 1.7.2p2。 这是一个可行的替代方案,但不是最佳解决方案。我宁愿在主机上运行最新的 sudo 更新。那么真正的问题是:如何着手修复上面的简单脚本以使其执行
关于Linux 须藤,[ Ant :sshexec] Remote command failed with exit status 127,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7483334/