Скрипты для удалённой работы с домашним компом

Дома стоят ветхий сервак (на нём этот блог), домашний комп и ноут.

То и дело появляется необходимость влезть на домашний комп по ssh, для чего его нужно как-то удалённо включить. У меня это можно сделать с сервера (он никогда не вырубается и настроен так, чтобы быть доступным по ssh из нэта). Каждый раз делать всё это ручками лениво, поэтому я автоматизировал процесс с помощью скриптов.

Далее я расскажу о скриптах, которые для этого всего использую.

За включение отвечает скрипт, использующий технологию Wake-on-Lan (WOL):

#!/usr/bin/env ruby
#encoding: ascii-8bit

require 'socket'

class WakeOnLan
  attr_accessor :mac

  def initialize mac
    @mac = mac
  end

  def send
    socket = UDPSocket.new
    socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_BROADCAST, true)
    socket.send(data, 0, '<broadcast>', 9)
  end

  private

  def data
    mac_data = @mac.split(':').map!{|i| i.hex.chr}.join
    "\xFF"*6 + mac_data*16
  end
end


wol = WakeOnLan.new(ARGV[0] || '00:00:00:00:00:00') # тут нужно указать mac-адрес сетевухи компа
wol.send

Скрипт написан на руби. Он посылает широковещательное сообщение с "волшебным пакетом" - специальной последовательностью данных, видя которую комп в сети, чей mac совпадает с указанным, включается.

Для того, чтобы это работало, нужно, чтобы в БИОСе компа WOL был разрешён. Скрипт писался давно, поэтому некрасивый, а я лентяй, не рефакторю.

Далее есть ещё один скрипт (GitHub Gist: renderer), которым я с ноута автоматически врубаю/вырубаю удалённый комп и монтирую/отмонтирую папку с данными с него. Он нормально прокомментирован, там должно быть всё понятно, что и как.

Идея его в том, чтобы одной командой можно было автоматически:

  1. включить старый комп
  2. подождать, пока он загрузится
  3. и тогда примонтировать папку с данными

( а другой командой - отмонтировать папку и вырубить старый комп)

Возможно, позже я добавлю ещё и автоматическое открытие папки с данными, пока не уверен, что это будет всегда нужно

З.Ы.: Да, мы с блогом ещё живы)