服务器 A 告诉服务器 B 执行 shell 脚本——最简单的方法?

服务器 A 告诉服务器 B 执行 shell 脚本——最简单的方法?

我的问题很模糊,但我故意这么模糊,因为我不想让答案偏向不必要的具体解决方案。

假设我有 Linux 服务器 A 和 B,其中服务器 A 上有一个 Web 应用程序,而服务器 B 没有。

假设我希望服务器 A 告诉服务器 B 执行一组特定的 shell 命令。因为我猜想有人会问,所以假设我想要运行的命令是:

mkdir /var/www/git/repo-1.git
cd /var/www/git/repo-1.git
git --bare init

我可以让服务器 A 告诉服务器 B 执行这些命令的最简单的方法是什么?

值得一提的是,无论我使用什么解决方案,安全性都是一个重要因素。

答案1

您没有具体提到命令要从 web 应用程序调用,所以我假设情况并非如此,因为这会使问题更加“特定于解决方案”。

最简单的方法,假设您有 ssh 访问权限。

在服务器A的终端上执行以下操作:

$ cat > script.sh                 
cat /proc/sys/kernel/hostname
^C

$ scp script.sh serverB:~
script.sh    100%   31     9.8KB/s   00:00

$ ssh serverB 'sh ~/script.sh'
serverB

答案2

您可以直接使用 SSH。通常,您会使用公钥/私钥对,以便主服务器无需密码即可登录从服务器。

然后使用

   SSH [email protected]  "command"

请注意,命令可以是单个命令、逗号分隔的命令列表,甚至可以是多行。您可以使用单引号来表示确切的命令,或者如果您想要解释变量,则可以使用双引号。

还有许多其他解决方案,大多数要么使用代理(如 puppet 或 chef),要么扩展 SSH 功能(如 ansible)。根据您对最简单的定义,SSH 可能是最佳候选者。

答案3

最简单的方法?如果 A 上有一个 Web 应用程序,则让服务器 A 具有服务器 B 可以查询的 URL,例如 blah.html?shouldidothatthing 返回“是”或“否”。然后让服务器 B 循环轮询它。

这避免了身份验证问题,或者需要限制服务器 B 可以让服务器 A 告诉它做什么等等。但如果您想传递敏感信息,效果就不会很好。

本质上,不要在它们之间推,而是拉。

相关内容