一台服务器通知另一台服务器上脚本执行的方法是什么?

2018-05-20 01:03:36 +08:00
 nikoo
例如在服务器 A 上运行着一个检测服务可用性的脚本,当发现服务不可用时,通过什么方式可以通知执行服务器 B 上的脚本(例如 /usr/local/bin/reboot.sh

目前使用的方法非常笨拙,需要在 B 服务器上搭建 nginx+php,然后 A 服务器去调用 http://B/reboot.php 然后这个 php 文件去执行这个脚本

所以针对这个需求应该如何解决呢?
2776 次点击
所在节点    问与答
17 条回复
CloudnuY
2018-05-20 01:05:23 +08:00
RPC ?
huclengyue
2018-05-20 01:05:44 +08:00
RPC
ys0290
2018-05-20 01:05:56 +08:00
ssh 免密登陆
nikoo
2018-05-20 01:09:03 +08:00
@CloudnuY @huclengyue 谢谢,能否简单叙述下如何实现?

@ys0290 意思时让 A 服务器 SSH 到 B 然后执行 B 上的脚本?那 B SSH 的私钥要存在 A 服务器里?
CloudnuY
2018-05-20 01:12:43 +08:00
@nikoo #4 RPC 需要做服务端和客户端开发; SSH 调用只需要把 A 的公钥存在 B 服务器里
Jakesoft
2018-05-20 01:13:53 +08:00
ssh root@hostb '/usr/local/bin/reboot.sh'
Jakesoft
2018-05-20 01:15:57 +08:00
先手动把 key 发过去,只要操作一次即可:ssh-copy-id root@hostb
nikoo
2018-05-20 01:25:42 +08:00
@CloudnuY @Jakesoft 非常感谢! SSH 这个方案优雅的一匹
jssyxzy
2018-05-20 02:47:45 +08:00
写个 shell
expect
nikoo
2018-05-20 03:02:12 +08:00
@jssyxzy 谢谢,不太明白,可稍微解释一下?
clino
2018-05-20 12:46:53 +08:00
简单就 ssh
比较多这种情况又复杂可以用 jenkins
defunct9
2018-05-20 13:26:54 +08:00
开 ssh,让我上去弄
defunct9
2018-05-20 13:31:29 +08:00
免密 ssh 有些问题,就是密钥爆露后对 B 机基本是为所欲为了。搭消息服务器,比如 rabbitmq,两机认证登陆消息服务器,且限定 B 执行的内容,我是这么做得。
defunct9
2018-05-20 13:33:39 +08:00
jenkins 也有问题,如果需要执行 root 权限的命令,那么 jenkins 需要配 sudo 权限,无形中放大了 jenkins 的权限。
symons
2018-05-20 19:14:47 +08:00
socket 通信
Arnie97
2018-05-21 02:21:30 +08:00
@defunct9 正是如此。楼主自己的方案问题在于所有人都能随便重启 B,而 #5 和 #7 的方案会使 A 能完全控制 B 的一切,也不合适。
ysc3839
2018-05-21 03:33:16 +08:00
我觉得 http 的方式没什么问题吧?要记得做身份验证,比如加个密码,最好能换成 https。
如果觉得 PHP 太大的话可以直接用 CGI 调用 shell 脚本。需要注意的是 nginx 不支持传统 CGI,只支持 FastCGI,可以用 fcgiwrap 来支持。
或者考虑用 Python 等语言直接运行一个 http 服务器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456222

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX