Pull to refresh

Экономим электричество на тонких клиентах

Reading time 2 min
Views 16K
В целях экономии электроэнергии на работе вышла директива: на выходные и праздники, а так же на ночь, все компьютеры, кроме критичных, должны быть выключены. Но как водится — кто то да забьёт забудет. Для тонких клиентов есть два решения — поднять TSmon и с него рулить или подключится к клиенту по ssh и дать команду на выключение.

По большому счёту сам процесс несложный — добавляем в сборку пакет sshd, задаём пароль для root в файле build.conf параметром param rootpasswd, собираем образ, загружаем, когда надо логинимся по ssh на клиенте и выключаем, но интереснее разослать всем нужным клиентам сигнал на выключение одной командой, без лишних телодвижений.

Почему не telnet — потому что по ssh проще сделать автологин, без костылей типа perl и expect. Далее описан способ реализации.

А реализовывать будем с помощью аутентификации по ключу, возможно у вас уже есть ключи в папке ~/.ssh и используются для других целей, тогда генерировать новые не нужно, просто копируем публичный ключ
cat id_rsa.pub >> authorized_keys
если нет то командуем:
ssh-keygen -t rsa; ssh-add; cd ~/.ssh; cat id_rsa.pub >> authorized_keys
Запросы пути для ключей и задать-подтвердить пароль на приватный ключ игнорируем, нам оно не надо, жмем просто Enter.
После выполнения команды в папке ~/.ssh у нас появятся три файла: id_rsa — приватный ключ, id_rsa.pub — публичный ключ и ключ authorized_keys. Просто переносим authorized_keys в папку конструктора Thinstation packages/sshd/etc/skel/.ssh, установите права 0700 на папку .ssh и 0600 на файл authorized_keys, собираем образ и после загрузки клиента можем логиниться на клиенте без пароля.

Если нужно логиниться на клиенте с разных машин или под из под разных пользователей, то генерируем под каждого пользователя ключи, добавляем их в ssh агента командой ssh-add и копируем содержимое получившихся id_rsa.pub в один authorized_keys.
Чуть не забыл, при первом подключении к клиенту ssh спрашивает «Are you sure you want to continue connecting (yes/no)?», заставим молчать, добавив опцию -oStrictHostKeyChecking=no, в команду ssh или создаём в папке своей учётки ~/.ssh файл config и пишем в него: StrictHostKeyChecking=no.

Несколько примеров использования:

Скрипт выключения клиентов по списку ip.txt:
#!/bin/sh

for ip in $(cat ip.txt)
do
ssh -oStrictHostKeyChecking=no root@$ip shutdown -h now&
#амперсанд в коце команды нужен что бы не тормозило, если хост не в сети
done

Отправить всем сообщение через Xdialog по списку ip.txt:
#!/bin/sh

for ip in $(cat ip.txt)
do
ssh -oStrictHostKeyChecking=no root@$ip DISPLAY=:0 Xdialog --infobox \
'"Проверка связи!!!\nПроверка связи!!! Проверка связи!!!\nПроверка связи!!!"' 300x200 0&
#амперсанд в коце команды нужен что бы не тормозило, если хост не в сети
#изменив 300x200 на -1 -1 получим сообщение во весь экран.
done

Вот такое сообщение...
Содержимоеimage

Чуть красивше — отправить всем сообщение через notify-send по списку ip.txt (нужно в build.conf добавить package notification-daemon):
#!/bin/sh

for ip in $(cat ip.txt)
do
ssh -oStrictHostKeyChecking=no root@$ip DISPLAY=:0 notify-send --expire-time=0 -u critical \
'Внимание!!!' '"Проверка связи\nПроверка связи\nПроверка связи\nПроверка связи"'&
#амперсанд в коце команды нужен что бы не тормозило, если хост не в сети
done

Вот такое сообщение...
image

Для облегчения образа из зависимостей notification-daemon можно убрать gtk-2.0, проверенно, работает.
Tags:
Hubs:
+6
Comments 25
Comments Comments 25

Articles