Expect: Удаленное выключение компьютера

Ответить
 • Просмотры: 1
Аватара пользователя
ven00m

Expect: Удаленное выключение компьютера

Сообщение ven00m »

Надоело каждый раз подключаться по 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

Re: Expect: Удаленное выключение компьютера

Сообщение elvin_sochi »

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

Для начала устанавливаем 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

Re: Expect: Удаленное выключение компьютера

Сообщение Kent »

Пароли хранятся в файле открытым текстом? Плохо.
Аватара пользователя
El Scorpio

Re: Expect: Удаленное выключение компьютера

Сообщение El Scorpio »

Цитата Kent:



Пароли хранятся в файле открытым текстом? Плохо.
Expect: Удаленное выключение компьютера




Лучше использовать авторизацию по личному ключу.

1. Создать пару ключей (через ssh-agent)

2. СКопировать открытый ключ на удалённый компьютер и прописать в настройках ssh-сервера

3. Подать команду на соединение (ssh username@IP )

4. Профит
Ответить

Вернуться в «Программирование в *nix»