- Shut down computer using ssh
- 6 Answers 6
- Скрипт выключения компьютеров на Linux по ssh
- Как выключить удаленный windows и linux сервер
- Дистанционное выключение Windows сервера
- Удаленное выключение linux сервера
- Заключение
- Онлайн курс по Linux
- How could I shutdown a remote host, in my network thru ssh, with a local host?
- 3 Answers 3
Shut down computer using ssh
What ways are there to shut down a computer using ssh? I’m running on linux and when I try to shut it down remotely using ssh, it doesn’t actually work. I used the command sudo shutdown now . Afterwards, it said that the system is going down for maintenance NOW or whatever. However, when I got home, I came to discover that the computer was still on stuck on the Plymouth shut-down screen. How can I achieve this?
This doesn’t sound like a linux problem. This sounds like a hardware problem that your machine refuses to shut down after receiving the shutdown command. What is Plymouth?
What distribution and version of Linux are you using? What messages are showing on the Plymouth shutdown screen? Can you edit your question to post a screenshot? Have you looked at the log files (e.g., /var/log/messages )? Can you edit your question to include the relevant part of the log file from when you began the shutdown to when it got stuck? If you want a good diagnosis you should provide more information.
6 Answers 6
Multiple ways, depending on habits and needs, but the most common method is:
Because it’s clean, it does a sync for all drives, and it’s easy to alter its behavior if you for some reason want to., For example, shut down an hour in the future instead.
In your particular case, it’s missing the -h flag, which requests a poweroff as well. Without the -h flag, it is left on the linux equivalent of the old Windows 95 “You can now shut off your computer” or whatever it was that it used to say.
Скрипт выключения компьютеров на 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 сервер
У меня появилась задача по организации оперативного выключения удаленных серверов в один клик. Причем выключать сервера должны разнообразные пользователи, в том числе и без знаний и понимания принципов работы сервера. То есть они должны просто нажать кнопку, чтобы сервер автоматически завершил свою работу.
Если у вас есть желание научиться администрировать системы на базе Linux, рекомендую познакомиться с онлайн-курсом «Linux для начинающих» в OTUS. Курс для новичков, для тех, кто с Linux не знаком. Подробная информация.
Причем выключать по сети нужно как windows серверы, так и linux различных дистрибутивов — ubuntu, centos, freebsd. То есть решение должно быть простое и надежное.
Дистанционное выключение Windows сервера
Начнем с самого сложного. На практике реализовать надежный способ выключения windows машин по сети для меня оказалось сложнее, чем linux. Методов и подходов к решению данной задачи много. Я пробовал разные варианты и остановился на одном, который мне показался самым надежным, он сработал без проблем во всех случаях во время тестирования.
Обязательным условием удаленного выключения сервера является сетевой доступ к нему по rdp. Вы можете находится в локальной сети с ним, подключиться по vpn или пробросить rdp соединение редиректом со шлюза. Не важно, главное попасть в систему по rdp.
Принцип работы удаленного отключения следующий:
- На компьютере или сервере создается пользователь, которому будет разрешено подключаться по rdp и завершать работу сервера.
- В автозагрузке этого пользователя будет скрипт для завершения работы.
- Пользователям, которые будут удаленно выключать сервер, дается специально подготовленный rdp клиент, который без всяких запросов будет подключаться нужным пользователем, у которого будет срабатывать скрипт на завершение работы.
Все достаточно просто, но на каждом этапе я сталкивался с проблемами, которые требовали не тривиального решения. Но обо все по порядку.
Итак, идем на север и создаем там простой bat файл следующего содержания:
Сохраняем файл и создаем пользователя, под которым будем выключать сервер. Не забудьте добавить этому пользователю разрешение подключаться по rdp. Если вы выключаете компьютер с десктопной системой, то прав обычного пользователя достаточно. Если же вам надо погасить Windows Server, то пользователя нужно либо сделать админа, либо дать ему права на разрешение выключение сервера через локальную политику безопасности. Живет эта политика по адресу — параметры безопасности — локальные политики — назначение прав пользователей — завершение работы системы.
Вот тут я напоролся на первые неприятности. Я назвал свой скрипт shutdown.bat и очень долго не мог понять, почему он не срабатывает. При вводе команды shutdown с параметрами в консоли все отлично работало, но скрипт не запускался. Оказывается, его нельзя называть таким именем. После того, как переименовал в shut.bat, все отлично заработало. Какая-то нелепая загвоздка, но мне пришлось потратить немало времени, пока я разобрался, в чем тут дело.
Дальше заходим нашим новым пользователем, чтобы создались стандартные папки профиля и кладем скрипт автовыключения сервера ему в автозагрузку — C:\Users\shut-user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup.
Теперь нам нужно настроить автоматический вход пользователя по rdp, чтобы выполнить удаленное завершение работы. Причем пользователь должен заходить на сервер без запроса имени и пароля. Штатными средствами rdp клиента windows это сделать невозможно. Даже если вы сохраните параметры, то при переносе настроек на другой компьютер нужно будет снова вводить пароль. Мне это не подходило.
Я пробовал использовать старую портированную версию rdp 5.2. Это последняя версия, где пароль в зашифрованном виде можно было хранить в файле настроек. Но при переносе этого файла на другой компьютер, все равно выскакивало окно с вводом пароля. Добиться полного автоматизма не получалось.
Но решение было найдено. Существует любопытный проект Remote Desktop Plus, который является надстройкой над rdp. С помощью этой надстройки можно передать параметры в rdp через командную строку, в том числе и имя пользователя с паролем. Мне это полностью подходит. Скачиваем файлик rdp.exe либо с сайта автора проекта, либо с моего. Я скопировал на всякий случай эту очень полезную утилиту. Кладем его в папку и создаем в этой же папке rem-shut.bat файл следующего содержания:
rdp.exe /v:10.10.5.14 /u:shut-user /p:pass123 /w:640 /h:480
10.10.5.14 | адрес удаленного сервера |
shut-user | пользователь rdp от имени которого будет происходить выключение |
pass123 | пароль пользователя |
640 480 | параметры разрешения экрана, можно не указывать |
Всего этого достаточно, чтобы выполнить дистанционное завершение работы на windows сервере. Пользователю необходимо передать 2 файла:
Важно, чтобы они лежали в одной папке. При запуске батника произойдет подключение rdp пользователя и выполнится скрипт завершения работы. Задача выполнена.
Удаленное выключение linux сервера
Здесь все оказалось значительно проще. Сразу же было найдено рабочее решение, которое позволяет без проблем удаленно выключить любой linux сервер. Задача решается стандартными средствами putty. Эту программу можно запускать из командной строки с параметрами. В качестве параметров можно указать файл с командами для выполнения, адрес сервера, пользователя и пароль.
Подготовим все необходимое. Сначала создаем простой текстовый документ shutdown.txt следующего содержания:
Дальше создаем bat файл serv-rem-shut.bat с таким содержимым:
putty.exe -m shutdown.txt -ssh -P 22 -l root -pw rootpass 10.10.5.15
shutdown.txt | текстовый файл с командой на отключение |
22 | номер порта ssh |
root | имя пользователя, от которого будет выполняться команда на удаленное выключение, лучше создать отдельного |
rootpass | пароль этого пользователя |
10.10.5.15 | адрес linux сервера |
Передаем пользователю 3 файла, сложенные в одну папку:
Теперь при запуске скрипта serv-rem-shut.bat серверу по сети будет отправлена консольная команда на завершение работы. При этом не будет задано никаких вопросов. Сервер просто молча выключится.
Заключение
Вот такие нехитрые способы были мной придуманы и реализованы. Тут еще важно обеспечить доступ к локальной сети, в которой живут серверы. В моем случае openvpn позволяет выполнить удаленное выключение компьютеров даже через интернет.
Уверен, существует множество других возможностей погасить сервер удаленно. Буду рад, если в комментариях со мной кто-нибудь поделится своими идеями и опытом на этот счет.
Онлайн курс по Linux
- Умение строить отказоустойчивые кластера виртуализации для запуска современных сервисов, рассчитанных под высокую нагрузку.
- Будете разбираться в современных технологиях кластеризации, оркестрации и виртуализации.
- Научитесь выбирать технологии для построения отказоустойчивых систем под высокую нагрузку.
- Практические навыки внедрения виртуализации KVM, oVirt, Xen.
- Кластеризация сервисов на базе pacemaker,k8s, nomad и построение дисковых кластеров на базе ceph, glaster, linstore.
How could I shutdown a remote host, in my network thru ssh, with a local host?
The question is simple.
What would be the script I would have to use to shut down a computer in my network thru ssh. Normaly i would go to command line and:
ssh desktop delik@desktop's password: delik@desktop:~$ sudo shutdown -P 0
And gave it the executable bit That way to power on it requires only a double click. Would i be capable of doing the same to shutdown?
3 Answers 3
For the following I am assuming that the user you are going to use in remote-host is the same you use in local-host .
In order to do what you want, you have to first authorize your local-host to connect to you remote-host with no password. To do that you have to (as described here):
/home/yourusername/.ssh/id_rsa
Your identification has been saved in /home/yourusername/.ssh/id_rsa. Your public key has been saved in /home/yourusername/.ssh/id_rsa.pub. The key fingerprint is: XX:XX:XX:xX:XX:xX:XX:XX:XX:XX:XX:XX:XX:XX yourusername@local-host
yourusername@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host yourusername@remote-host's password: Now try logging into the machine, with: ssh remote-host
ssh remote-host yourusername@remote-host:~$
Now you have to be able to execute sudo shutdown -P 0 with no password. You can do that by modifying /etc/sudoers on remote-host with visudo . That way, user yourusername can execute the shutdown command with no password asked.
yourusername ALL = NOPASSWD: /sbin/shutdown
ssh remote.host sudo shutdown -P 0