В целях экономии электроэнергии на работе вышла директива: на выходные и праздники, а так же на ночь, все компьютеры, кроме критичных, должны быть выключены. Но как водится — кто то да забьёт забудет. Для тонких клиентов есть два решения — поднять 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, проверенно, работает.

Комментарии (23)


  1. Akr0n
    06.10.2015 18:08
    +5

    Это что же за предприятие такое? И много наэкономили? Шмон по тумбочкам на предмет электрических чайников и микроволновок не выгодней ли будет?


    1. StirolXXX
      06.10.2015 18:44
      +3

      Ну не скажи, если у тебя 500+ компов в здании то получится достаточно эффективно.
      Ну допустим в простое они кушают 10вт, выходит 5 киловатт да жрут, за ночь (10 часов) будет 50кВтч.
      За месяц (22 «рабочих» ночи) можно сэкономить 1.1мВтч. Вполне приличная сумма…

      Вопрос автору: А не проще-ли было тонкие клиенты просто уводить в standby через 90 минут бездействия?


      1. Akr0n
        06.10.2015 18:49
        +1

        Что же за контора такая, если там 100% сотрудников идиоты и вредители, не выключающие по уходу домой технику? Я как бы за энергоэффективность и все такое, но требование работодателя, описанное автором — какой-то бред. Один чайник в кабинете убивает за несколько минут всю эту экономию.


        1. shweew
          06.10.2015 19:19

          Ну чайников нет, кулера стоят.


      1. shweew
        06.10.2015 19:19

        standby проще, но как то не все хотят из него выходить, причём закономерности нет, что бы отловить глюк.


      1. ArjLover
        09.10.2015 00:59

        Нерабочих часов у служебного компа не 10, а 15, но все равно… Что-то меня гложут сомнения. Неважно сколько компов, интересно сколько это рабочее место приносит прибыли и какая доля электричества в этой прибыли. Думаю что мизерная.
        С другой стороны — включенный комп на работе, тем более неадминский и тем более тонкий клиент не имеет никакого смысла. И если это можно потюнить, то почему бы и нет?
        Сам я комп не выключал уже лет 15. Могу себе позволить удовольствие сесть за работающий комп в любой момент. )) Кстати пользуясь случаем посчитаем. Весь мой «угол» включен через розетку со счетчиком, там 100+ ватт, с погашенным монитором и без лампы ну пусть будет 80, я сижу много, остается 12 часов нерабочих часов, итого 0,96 киловатта, по 5 чешских крон = 5 крон или 11 рублей в день? Фигня какая за такое удовольствие.


        1. shweew
          09.10.2015 07:37
          +1

          Да какая разница сколько экономится, главное что это происходит, причём без каких-либо вложений.


        1. shweew
          09.10.2015 11:12

          100 таких компов — 1100 в день, в месяц, грубо, 33 круб, как-то на фигню не похоже, больше з/п 1 сотрудника.


  1. evg_krsk
    06.10.2015 18:48
    +1

    ansible --forks=999 --inventory=ips.txt all -m command -a shutdown -h now

    и всё.


    1. shweew
      06.10.2015 19:23

      Ну конечно «и всё», после того как Ansible настроишь.
      Он у нас не используется и заморачиваться пока не собираемся.


    1. shweew
      06.10.2015 19:37

      И что-то я не припомню в Thinstation пакета для подключения к ansible, недавно один товарищ прикрутил GLPI и FusionInventory, так образ на 13 мб вырос, что потихоньку извращает принципы «тонкоклиентности». :-)


      1. evg_krsk
        06.10.2015 19:46

        Если есть возможность подключиться ssh-клиентом — значит уже всё готово для подключения к хосту ansible. 0 байт сверху.

        За исключением пары-тройки аргументов командной строки (--user=root, может ещё что-то забыл) больше ничего сверху не нужно настраивать в ansible.


        1. shweew
          06.10.2015 19:57
          -1

          Ну дай то бог, я ж говорю, не юзал, обходимся так.


        1. shweew
          06.10.2015 20:42

          Почитал по ansible, для того, чтобы управлять машиной, на ней должен быть установлен Python, что всё таки утяжелит сборку.


          1. evg_krsk
            06.10.2015 20:52

            Забыл совсем, привык к толстым никсам. Виноват-с.


          1. kstep
            08.10.2015 16:32

            Нет, если используете модуль raw. Ну и потом питон в минимальном виде не так уж тяжёл, раз уж вы уже ssh-сервер ставите. А если не используете всякие экзотические модули, то и дополнительных либ к питону ставить не нужно.


  1. shweew
    06.10.2015 19:41

    Помню на TS-2 образ для подключения по xdmcp весил меньше 10 мб, на TS-5 меньше 20 мб не получается, всё толще и толще…


  1. DeadMoroz
    08.10.2015 16:30

    cat id_rsa.pub > authorized_keys
    

    Зачем перезаписывать файл полностью?


    1. shweew
      08.10.2015 16:43

      Спасибо, поправил.


  1. Sleuthhound
    09.10.2015 06:22

    Подскажите пожалуйста какие тонкие клиенты (ПК) используете? Какие наименее глючные? Спасибо.


    1. shweew
      09.10.2015 07:41

      В основном от ТОНК


      1. Sleuthhound
        09.10.2015 11:20

        Ценник у них совсем не гуманный, в среднем 15 тыс. за тонкого клиента — это перебор.


        1. shweew
          09.10.2015 11:38

          Ну раньше дешевле было, курс $ и т.д…