Ответ 1
Как указано jørgensen, вы можете использовать SYSRQ (http://en.wikipedia.org/wiki/Magic_SysRq_key), API, напрямую говорящий с ядром.
Остерегайтесь, это довольно хардкор и может нанести вред вашему оборудованию. Для перезагрузки требуется однократная передача пакета UDP. Boom. Мы используем его только на живых бездисковых компьютерах.
1. xt_SYSRQ (модули iptables, ядро)
Существует xt_SYSRQ, один из модулей iptables, предоставляемый xtables-addons-common: 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 прослушивающий демон, userland)
Это решение работает, только если ваш кирпичный компьютер способен обрабатывать TCP-соединения.
Установка на debian
#!/bin/bash
apt-get install -qq sysrqd
echo "yolo" > /etc/sysrqd.secret
service sysrqd restart
Перезагрузка Shutgun
Я сделал script, https://gist.github.com/qolund/1470beaa1a63e034025d, но его просто соединение TCP на порту 4094. Вам необходимо отправить пароль и команды,
# 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" выполняется слишком быстро, компьютер уже перезагружается.