没有SSH远程关闭/重启Linux机箱?

jas*_*xun 10 linux reboot shutdown remote-access wake-on-lan

我需要远程关闭并重新启动Linux(Ubuntu)机器而无需登录它们(否则简单的命令可以完成这项工作).这些机器只是便宜的PC,因此没有安装特殊的电源管理硬件(尽管它们可以在局域网上唤醒).是否有某种"电源管理服务器"软件可以安装在这些盒子上,这些软件会监听远程重启/关闭请求并采取相应措施?当然,如果它需要一些身份验证(密码)以响应请求,那将是很好的.

Nop*_*ope 10

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

请注意,这些都非常硬核,可能会损害您的硬件.它需要一个UDP数据包传输的时间才能重新启动.繁荣.我们只在无盘无人机上使用它.

1. xt_SYSRQ(iptables模块,内核)

有xt_SYSRQ,通过xtables-插件共用提供的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
Run Code Online (Sandbox Code Playgroud)

霰弹枪重启

#!/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
Run Code Online (Sandbox Code Playgroud)

2. sysrqd(tcp 4094侦听守护进程,userland)

此解决方案仅在您的计算机能够处理TCP连接时才有效.

在debian上安装

#!/bin/bash
apt-get install -qq sysrqd
echo "yolo" > /etc/sysrqd.secret
service sysrqd restart
Run Code Online (Sandbox Code Playgroud)

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
[..]
Run Code Online (Sandbox Code Playgroud)

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


Pab*_*zzi 4

几个选项:

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