Скрипт выключения компьютеров на Linux по ssh
Рассмотрим возможность автоматизации процесса выключения нескольких компьютеров либо одного, работающих на операционной системе Linux в локальной сети путем запуска скрипта на bash.
# touch poweroff_script.sh (создание скрипта)
# nano poweroff_script.sh (открытие текстовым редактором)
ssh root@192.168.X.XXX «poweroff»
Сохранив изменения в файле даем ему права на запись и генерируем ключ для дальнейшего входа без ввода пароля:
# chmod +x poweroff_script.sh (права на выполнение)
# ssh-keygen (генерация ключа)
Перейдя в каталог . ssh расположенном в root введя команду:
Нужно скопировать представленный ключ на компьютеры которые планируется в дальнейшем выключать в локальной сети.
# cat id_rsa.pub | ssh root@192.168.X.X“cat >> .ssh/aut_key” (переносим ключ на другой ПК)
Нажав Enter вводим пароль компьютера на который переносим ключ.
Теперь, если ввести просто
авторизация должна пройти без запроса пароля.
Выполнив указанные настройки, запустив скрипт poweroff_script.sh командой
указанные в нем команды будут выполнены, а компьютер или компьютеры в локальной сети будут выключены.
Подробнее — в представленном видео:
Фото- и видеоматериалы взяты с канала ServLesson на YouTube.
Как удаленно выключить компьютер с Windows, Linux и Mac?
Бывают случаи, когда компьютер, работающий под управлением операционной системы Windows, Linux и Mac нужно выключить не сразу, а по истечению какого-то времени: загрузка торрента, обновление программы или операционной системы, завершение диагностики и т д. При этом, чтобы удаленно выключить компьютер с Windows или любой другой операционной системой, нужно изначально настроить его. Поэтому предлагаем рассмотреть способы, как осуществить удаленное выключение устройства.
Методы удаленного выключения ПК с Windows 7, 8/8.1, 10
Удаленно выключить ПК с Windows можно несколькими способами: с помощью командной строки и с помощью службы удаленного реестра. В первом случае нужно запустить консоль с правами Администратора и ввести shutdown /i.
Откроется окно утилиты Remote Shutdown. Нажимаем на кнопку «Добавить».
Вводим имя компьютера и жмем «Ок».
Теперь выбираем операцию: перезагрузка, выключение или неожиданное завершение.
В причинах выбираем «Другое (запланированное)», а также указываем комментарий. Без комментария кнопка «ОК» не будет активной. Кликаем «Ок».
Для того, чтобы удаленно выключить компьютер с Windows 7 и выше с помощью службы удаленного реестра, стоит выполнить следующее:
- Теперь запускаем Брандмауэр. В меню слева выбираем «Разрешить запуск программы или компонента через брандмауэр Windows».
- Выбираем «Удаленное управление Windows» или «Windows Management Instrumentation». Устанавливаем флажки.
- Теперь с помощью командной строки запускаем удаленное выключение ПК.
Как удаленно выключить ПК с Linux?
Устройство с операционной системой Linux можно удаленно выключить несколькими способами.
Первый способ – использование Терминала, аналога командной строки с Windows.
- Запускаем терминал. Вводим sudo shutdown -h now. Это команда, которая выключит компьютер сразу.
- Если ввести sudo shutdown -h +5, то система завершит свою работу через 5 минут. Время можно задавать свое. К примеру, можно задать точное время sudo shutdown -h 21:00.
- Для того, чтобы отменить выключение, стоит ввести sudo shutdown –c.
Также, если ваш ПК подключен к серверу, то удаленно выключить компьютер с Linux можно следующим образом:
- Необходимо установить или запустить стандартное средство putty. Эту программу можно запустить из командной строки.
- Теперь создаем документ shutdown.txt с содержанием shutdown -h now.
- Теперь создаем документ с разрешением bat и названием serv-rem-shut.bat. Содержание должно быть следующим putty.exe -m shutdown.txt -ssh -P 22 -l root -pw rootpass 10.10.5.15, где каждая команда имеет свое обозначение.
- Передаем пользователю на ПК, который нужно выключить, три файла:
- putty.exe
- shutdown.txt
- serv-rem-shut.bat
Теперь, при запуске скрипта serv-rem-shut.bat, серверу по сети будет отправлена команда на завершение работы. При этом система не выдаст никаких вопросов. Сервер просто молча выключится.
Как удаленно выключить ПК с Mac?
Для того, чтобы удаленно выключить Mac, стоит выполнить следующие действия:
- Запускаем командную строку, перейдя по адресу /Applications/Utilities/folder.
- Вводим sudo shutdown -h now. Компьютер сразу выключиться.
Если же запустить Терминал, то командой sudo halt можно моментально выключить устройство. Однако, как в первом, так и во втором случае, нужно ввести пароль к учетной записи Mac.
В сети можно найти еще способы, как удаленно отключить устройства с Windows, Linux и Mac. Однако мы привели только безопасные способы, при применении которых вы не нарушите системные настройки и не повредите системные файлы.
Как дистанционно выключить все компьютеры linux?
Подскажите плз как из под linux массово выключить linux компьютеры в заданное время?
И отдельный скрипт по включению?
на выключение пробовал через expect — почему-то не получилось.
вот пример мой выключения 1 компьютера, но он не работает, почему?
#!/usr/bin/expect spawn ssh root@192.168.2.27 expect password send "poweroff\r"
Перемещено beastie из general
Чтобы никого не обидеть, будем называть его a-word.
А чего не ssh root@192.168.2.27 poweroff ? И почему по паролю, а не по ключу?
А разве всякие там puppet и прочие подобные системы не для того придуманы?
#!/bin/bash while read host; do ssh power@$host nohup poweroff done < /etc/power/hostlist
Еще более прикольный вопрос: кагого вообще root, если должен быть выделенный юзверь, умеющий только poweroff.
Кстати, можно в shell юзера power написать nohup poweroff → достаточно будет тупо писать ssh power@host
а вот именно через expect это возможно?
чтобы по ключу, я так понимаю надо на всех машинах создать этот ключ?
как сделать именно через expect по паролю?
чтобы по ключу, я так понимаю надо на всех машинах создать этот ключ?
Я без понятия, что такое expect и нафиг оно нужно. А ssh должен быть по ключам. Ибо нефиг фигней маяться!
#!/bin/bash while read host; do echo -e "\nssh to $host. " ssh-copy-id power@$host done < /etc/power/hostlist
З.Ы. Ни в коем случае не делай ssh руту по ключам!
З.З.Ы. И лучше вообще запрещать везде доступ руту по ssh. Заходишь под обычным пользователем, потом делаешь su -.
Байку про выезжающий сидюк уже рассказывали?
- Сделай для рута на каждом клиенте возможность авторизации по ключу,
- создай отдельный ключ,
- на каждом клиенте в /root/.ssh/authorized_keys пропиши публичную часть ключа с параметром command="poweroff" .
Теперь любой ssh -i key.file root@$host выключит host . Только нужно будет ssh по ним всем запустить, чтобы они в known_hosts прописались.
Ни в коем случае не делай ssh руту по ключам!
подписываюсь под вопросом
Вход по ключам + типа такого:
HOST1=0.1 HOST2=0.2 HOST3=0.3 COMMAND=halt CONNECT=ssh USER=root $CONNECT $USER@192.168.$HOST1 $COMMAND $CONNECT $USER@192.168.$HOST2 $COMMAND $CONNECT $USER@192.168.$HOST3 $COMMAND
Потому что завладев одним паролем юзверя, от которого запускается этот скрипт, получим рутовский доступ к уйме компов!
По ключам ни в коем случае нельзя руту по ssh.
Ну можно не руту, а отдельному пользователю которому разрешено делать halt
Вот я ниже скриптики и привел для пользователя power, которому шеллом назначается poweroff или halt, запущенный в nohup (чтобы сразу соединение закрылось).
По ключам ни в коем случае нельзя руту по ssh.
А вот PermitRootLogin prohibit-password не помешает.
Так, с выключением, вроде разобрались. А для включения используй WOL.
%staff ALL=(ALL) NOPASSWD: poweroff
По ключам ни в коем случае нельзя руту по ssh.
Вообще-то, ключ, по которому доступен рут лежит на машине админа (а кто еще заходит под рутом). И чтобы получить его, нужно чтобы либо админ был балбесом, либо целенаправленная атака на конкретного человека. Т.е. шансов мало завладеть ключем.
В описанной ситуации по-любому нужно уметь делать автоматическое выключение машин, поэтому, кто завладеет машиной, с которой запускается скрипт, тот сможет его запустить. Так что не важно будет там авторизация по ключам или другая. В моем алгоритме, завладев ключем ничего кроме poweroff сделать не получится.
P.S. По моему мнению, закрывание входа по ssh руту - параноя, которая создает трудности (иногда нужно иметь возможность, например, скопировать файлы доступные на одной машине только руту, на другую в место доступное тоже только руту, и делать это в два приема неудобно, кроме того, иногда бывает нужно сделать что-то со /home, отмонтировать, например, а зайдя пользователем и сделав sudo su -, хотяка не отмонтируешь). Короче, запрет входа руту даже по ключу создает неоправданные сложности (не окупает оно себя в общем). Так же как и перевешивание ssh на нестандартный порт, например, чтобы не подбирали пароли пользователей (есть более эффективные методы без необходимости обучать scp, git и другие программы, которые ходят по ssh использованию нестандартного порта).
Представь, что у ТСа рутовский доступ по ключам к сотне компов. Он отошел, забыв заблокировать экран. Кто-нибудь шутки ради запускает скрипт по аналогии с вышеприведенным, но на nohup rm -rf / . Классная будет шутка.
Во первых, по хорошему, сам ключь запаролен. (И ssh-agent для ленивых.)
Представь, что у ТСа рутовский доступ по ключам к сотне компов. Он отошел, забыв заблокировать экран.
Отсюда вытекает правило: «Никому не давай свой комп разблокированным и запущенным ssh-agent'ом!»
P.S. Я наблюдал сильную корреляцию между параноей недавания входа рутом и любовью к FreeBSD (пока BSD еще оставалась популярной в России). Эдди, ты BSD'оид?
я понял. Это мамкин кулхацкер хочет кому-то насолить. К гадалке не ходить.
Представь, что у ТСа рутовский доступ по ключам к сотне компов.
окстись, он же школьник еще. 99 год рождения же.
Нет еще. Но если гента тоже сдохнет, то буду.