Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование в *nix (http://forum.oszone.net/forumdisplay.php?f=35)
-   -   Expect: Удаленное выключение компьютера (http://forum.oszone.net/showthread.php?t=176433)

ven00m 24-05-2010 10:26 1419785

Expect: Удаленное выключение компьютера
 
Надоело каждый раз подключаться по ssh чтобы выключить компьютер. Написал небольшой скрипт:
Код:

#!/usr/bin/expect
set timeout 30
spawn ssh -p 443 192.168.1.10
expect "user@mycomp" { send "sudo su\r" }
expect {
"password for*:" { send "mypassword\r" }
"root@*#" { send "halt\r" }
}
expect {
"root@*#" { send "halt\r" }
}

Но почему то он срабатывает только со второго раза. В первый запуск он только логинется под рутом, а во второй выключает.
Подскажите что не так в скрипте.
PS: ос Ubuntu Server

elvin_sochi 06-03-2011 17:26 1628731

Доброго времени суток. Подозреваю, что топикстартер свою проблему уже решил. Пишу для тех, кто с ней только столкнулся.
Для начала устанавливаем expect:
sudo apt-get install

После, создаём файл, который у нас станет скриптом выключения сервака. У меня его содержимое выглядит так:

#!/usr/bin/expect -f #Строка идентификации
spawn ssh -p Порт IP-Адрес #Запуск подпроцесса соединения с сервером через ssh
expect -re"password:" #Ожидание ответа, содержащего в тексте - password:
send "пароль\r" #Дождавшись, отослать пароль
expect -re "\\$ $" #Ждём строку, содержащую $(на него заканчивается приглашение системы)
send "sudo su\r" #Отсылаем команду sudo su для перехода в режим суперпользователя
expect -re "password for пользователь:" #Ждём запрос пароля
send "пароль\r" #Подтверждаем права паролем
expect -re "# $" #Ждём строку, содержащую $
send "poweroff\r" #Тушим сервер
expect -re "power off NOW!" #Удостоверяемся, что машина ушла на выключение
exit 0 #Собственно, удаляемся сами

У топикстартера присутствует строка "set timeout 30", назначение которой для меня осталось тайной, возможно она Вам тоже пригодится.

Kent 06-03-2011 18:59 1628805

Пароли хранятся в файле открытым текстом? Плохо.

El Scorpio 11-03-2011 02:45 1632037

Цитата:

Цитата Kent
Пароли хранятся в файле открытым текстом? Плохо. »

Лучше использовать авторизацию по личному ключу.
1. Создать пару ключей (через ssh-agent)
2. СКопировать открытый ключ на удалённый компьютер и прописать в настройках ssh-сервера
3. Подать команду на соединение (ssh username@IP )
4. Профит


Время: 13:09.

Время: 13:09.
© OSzone.net 2001-