远程关机/重新启动没有SSH的Linux机箱?

我需要远程关闭并重新启动 Linux(Ubuntu)机器,而无需登录(否则简单的命令可以做到这一点).这些机器只是便宜的电脑,所以没有安装特殊的电源管理硬件(虽然他们可以唤醒).是否有某种“电源管理服务器”软件,我可以安装在那些盒子上,它们监听远程请求重新启动/关闭,并相应地执行?当然,如果它需要一些验证(密码)来响应请求,这将是很好的.

解决方法

如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

sysrqd(tcp 4094监听守护进程,用户界面)

解决方案仅在您的bricked计算机能够处理TCP连接时才起作用.

在debian上安装

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

关闭重启

我做了一个脚本,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命令太快,计算机已经重新启动.

相关文章

Linux中的ARP防火墙主要用于防御ARP欺骗攻击,其效果取决于多...
insmod和modprobe加-f参数导致Invalid module format错误 这...
将ArchLinux安装到U盘 几个月前入门Arch的时候上网搜了不少安...
1、安装Apache。 1)执行如下命令,安装Apache服务及其扩展包...
一、先说一下用ansible批量采集机器信息的实现办法: 1、先把...
安装配置 1. 安装vsftpd 检查是否安装了vsftpd # rpm -qa | ...