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

时间:2016-10-06 11:40:09

标签: bash nginx messaging saas

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

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

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

1 个答案:

答案 0 :(得分:2)

看看这个:

我们假设您有2台服务器,A和B.当您在A上获得命令时,您希望在B上运行bash脚本。

为了使其工作,我们可能想在2台服务器之间设置auto-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上的命令,我会假设你有一个日志文件,我们可以从logfile中读取来调用A上的脚本,这将调用B上的脚本。< / p>

这是我的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过滤器,该过滤器正在寻找关键字&#34; 2559&#34;一旦匹配,它就会调用A上的脚本,即&#34; a.sh&#34;登录到B并执行脚本&#34; b.sh&#34;在B上,它的输出在A上看到。你可以把另一个脚本放在&#34; b.sh&#34;执行别的东西或任何你想要的东西。

这是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$>

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

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