远程closures/重新启动没有SSH的Linux框?

我需要远程closures并重新启动Linux(Ubuntu)的机器而不login它们 (否则简单的命令可以完成这项工作)。 这些机器只是便宜的个人电脑,所以没有安装特殊的电源pipe理硬件(虽然他们可以唤醒局域网)。 是否有某种“电源pipe理服务器”软件,我可以安装在那些监听远程请求重新启动/关机,并采取相应的行动? 当然,如果它需要一些authentication(密码)以响应请求,那将是很好的。

正如jørgensen所指出的,你可以使用SYSRQ( http://en.wikipedia.org/wiki/Magic_SysRq_key ),一个直接与内核通信的API。

当心,这些是相当硬核,可能会损害您的硬件。 只需要一个UDP数据包传输的时间就可以重启。 繁荣。 我们只在活动的无盘电脑上使用它。

1. xt_SYSRQ(iptables模块,内核)

xt_SYSRQ是xtables-addons-common提供的iptables模块之一: http ://manpages.ubuntu.com/manpages/oneiric/man8/xtables-addons.8.html

在debian上安装

 #!/bin/bash apt-get install -qq xtables-addons-common iptables echo -n "yolo" >/sys/module/xt_SYSRQ/parameters/password iptables -A INPUT -p udp --dport 9 -j SYSRQ 

霰弹枪重新启动

 #!/bin/bash sysrq_key="sub" # the SysRq key(s), Sync, Unmount, reBoot password="yolo" seqno="$(date +%s)" salt="$(dd bs=12 count=1 if=/dev/urandom 2>/dev/null | openssl enc -base64)" ipaddr="$1" req="$sysrq_key,$seqno,$salt" req="$req,$(echo -n "$req,$ipaddr,$password" | sha1sum | cut -c1-40)" echo "$req" | socat stdin udp-sendto:$ipaddr:9 

2. sysrqd(tcp 4094监听守护进程,用户空间)

只有当您的计算机能够处理TCP连接时,此解决方案才能正常工作。

在debian上安装

 #!/bin/bash apt-get install -qq sysrqd echo "yolo" > /etc/sysrqd.secret service sysrqd restart 

Shutgun重启

我做了一个脚本, https: //gist.github.com/qolund/1470beaa1a63e034025d,但它只是一个端口4094上的TCP连接。你需要发送密码和命令,

 # telnet 172.16.42.180 4094 Trying 172.16.42.180... Connected to 172.16.42.180. Escape character is '^]'. sysrqd password: nope Go away! Connection closed by foreign host. # telnet 172.16.42.180 4094 Trying 172.16.42.180... Connected to 172.16.42.180. Escape character is '^]'. sysrqd password: yolo sysrq> sub [..] 

连接没有正确关闭,因为'b'reboot命令太快,计算机已经重新启动。

几个选项:

  • 木偶
  • 厨师
  • cfengine的

这些工具并不完全是关闭机器(但他们可以做到),它们是管理大量机器的配置管理框架,可以在一台机器上处理配置更改,软件包安装和更新,以及运行所有你想要的命令,在一组机器中,或在整个网络中。