运行 远程服务器上的 bash 脚本

Run a bash script on a remote server

我正在开发一个应用程序,当我的用户通过 Web 界面向我发出命令时,它需要我在远程服务器上执行 bash 脚本。

当我在主应用程序服务器上收到命令时,有什么方法可以在远程服务器上 运行 bash 脚本?

P.S。 bash 脚本需要执行一些只有 root 用户才能执行的任务,例如重启 NGINX。

看看这个:

假设您有 2 台服务器,A 和 B。当您在 A 上收到命令时,您想在 B 上 运行 一个 bash 脚本。

为了让它工作,我们可能需要在 2 个服务器之间设置自动 ssh。否则,每次都需要手动输入密码。

# Setting up auto ssh from A to B. Execute below commands from Server A.

cat ~/.ssh/id_pub.rsa | ssh user_of_B@IP_of_B ">> ~/.ssh/authorized_keys"
ssh user_ofB@IP_of_B "chmod 640 ~/.ssh/authorized_keys ; chmod 700 ~/.ssh"

以上步骤假定您的服务器 A 具有正确的目录权限设置并且服务器 B 具有标准的 SSH 配置(允许配置和使用自动 ssh ["PubKeyAuthentication yes"]

既然你没有提到,你将如何处理 A 上的命令,我假设你有一个日志文件,我们可以从日志文件中读取以调用 A 上的脚本,这将调用 B 上的脚本.

这是我的uname -a和主机名,供参考。现在,这是我们的服务器 A.

bash$> uname -a
Linux STATION.84station.com 3.10.0-327.36.1.el7.x86_64 #1 SMP Sun Sep 18 13:04:29 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
bash$> hostname
STATION.84station.com
bash$>

现在是第二部分,解析传入日志并采取行动。

# Reading logfile on A, invoke a script on A to invoke a script on server B. 

bash$> tail -f logfile |perl -nle 'if (m/2559/) {system("./a.sh")} '

SunOS solaris 5.10 Generic_147148-26 i86pc i386 i86pc

lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g0: flags=1004843<UP,BROADCAST,RUNNING,MULTICAST,DHCP,IPv4> mtu 1500 index 2
        inet 192.168.2.135 netmask ffffff00 broadcast 192.168.2.255

-rwxr-xr-x   1 gaurav   other         53 Oct  6 21:04 /export/home/b.sh
^C
bash$>

在服务器 A 上,读取日志文件,将其提供给 perl 过滤器,该过滤器正在寻找关键字“2559”,一旦匹配,它就会调用 A 上的脚本,即 "a.sh"登录到 B 并在 B 上执行脚本 "b.sh",它的输出在 A 上可以看到。您可以将另一个脚本放在 "b.sh" 中以执行其他内容或您想要的任何内容。

这里是 A 上的 a.sh,它调用 B 上的 b.sh。

bash$> cat a.sh
#!/bin/bash

ssh gaurav@192.168.2.135 "

uname -a
echo
/usr/sbin/ifconfig -a
echo
ls -lrtha /export/home/b.sh

"
bash$>

您可以将命令放在引号之间,如上所示。

所以这是我们可以执行所需操作的一种方法。干杯!