пятница, 24 февраля 2012 г.

Cкрипт удаленной перезагрузки linux-сервера через openssh

Так случается, что не всегда есть возможность самому подключиться к удаленному Linux-серверу, чтобы его перезагрузить (например, для вступления в силу каких-либо изменений). Тогда появляется необходимость дать права на перезагрузку юзверю. Но, чтобы не давать ему админских прав на управление сервером, можно наваять скриптец для удаленной перезагрузки. Понадобится:

1. Openssh-server на Linux-сервере:
admin@server$ sudo apt-get install openssh-server

2. Openssh-client на Linux-клиенте:
admin@client$ sudo apt-get install openssh-client

3. Создаем на сервере пользователя, от имени которого будет выполняться ребут:
admin@server$ sudo useradd -m -s /bin/bash rebootuser
admin@server$ sudo passwd rebootuser
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully 

4. На клиенте создаем открытый ключ (дабыне палить root пароли юзверям):
admin@client$ ssh-keygen -t rsa
 
на предложение
Enter passphrase:
Enter same passphrase again:
нажать 'Enter' (т.е. Оставить пустым, чтоб ssh не требовал пароль)

ключ будет лежать в ~/.ssh/id_rsa.pub

5. Копируем открытый ключ на сервер:
Содержимое файла ~/.ssh/id_rsa.pub на клиенте, необходимо скопировать в файл домашней директории пользователя, от имени которого будет осуществляться подключение по ssh (в нашем случае - это rebootuser) ~/.ssh/authorized_keys (если его нет, создаем) на сервере. Сохраняем. Дергаем службу ssh ($sudo /etc/init.d/ssh restart)

Логинимся на серв для проверки:
admin@client$ ssh rebootuser@'server_ip'

Вуаля! Входим без запроса пароля!

6. Разрешаем на сервере rebotuser`у выполнять перезгрузку и выключение сервера без ввода пароля:
admin@server$ sudo visudo
и в конц добавляем
rebootuser 'server_name'=NOPASSWD: /sbin/reboot,/sbin/shutdown -h now

7. Создаем на клиенте скрипт ребута и делаем его исполнительным:
admin@client$ mcedit reboot_halt.sh
и вставляем в него:
ssh -t rebootuser@'server_ip' 'sudo reboot'
для выключения соответственно:
ssh -t rebootuser@'server_ip' 'sudo shutdown -h now'
даем права на исполнение:
admin@client$ chmod o+x reboot_halt.sh

Жопиздан:)

1 комментарий: