The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Expect. Скрипт виснет.. Похоже, что навсегда :("
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Expect. Скрипт виснет.. Похоже, что навсегда :("  
Сообщение от GeKa email(??) on 15-Мрт-06, 14:48 
Добрый день!

С начала в кратце опишу собсно сам проблемный скрипт.
Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
Выглядит он примерно так:

#!/usr/local/bin/expect -f

...

set timeout 600
set timedout 1

while {$timedout == 1} {
  set timedout 0
  set pid [spawn su $login -c "/usr/local/bin/rsync -avz -e'ssh -cblowfish' ..."]

  expect {
    "Password" { send "$password\n"; exp_continue }
    ...
    timeout { set timedout 1 }
  }

  if { $timedout = 1 } {
    spawn kill -9 $pid
  }
}

...


И вот, этот скрипт зачастую просто не завершает работу. Причем rsync отрабатывает. А вот su почему-то не возвращается. В списке процессов я вижу следующее:

#ps -auwwx | grep su
root    28079  0.0  0.0    0   0  p0- RE  11:13AM   0:01.36 [su]

Меня смущает это RE.. Более того, kill -9 в данном случае не помогает. Процесс не убивается. Убить его можно только, убив родителя.

Самое интересное, что при запуске этого скрипта вручную, вроде все Ок, а при запуске кроном - описанные выше проблемы.

Подозреваю, что что-то намудил с expect'ом.. Версий нет.. Может кто подскажет? :/

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Expect. Скрипт виснет.. Похоже, что навсегда :("  
Сообщение от chip email(ok) on 16-Мрт-06, 17:14 
>Добрый день!
>
>С начала в кратце опишу собсно сам проблемный скрипт.
>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем

ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным + для openssh можно написать соотвествующий restriction, который позволит запускать исключительно определенный диапазон команд.

ps: в качестве замены su <=> sudo

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "Expect. Скрипт виснет.. Похоже, что навсегда :("  
Сообщение от GeKa email(??) on 16-Мрт-06, 17:40 
>>Добрый день!
>>
>>С начала в кратце опишу собсно сам проблемный скрипт.
>>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
>
>ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным
>+ для openssh можно написать соотвествующий restriction, который позволит запускать исключительно
>определенный диапазон команд.
>
>ps: в качестве замены su <=> sudo

Мм.. не совсем понял. Можно примерчик? Желательно близкий к тому, что я привел в исходном посте. В чем смысл замены su на sudo? И при чем тут RSA?

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "Expect. Скрипт виснет.. Похоже, что навсегда :("  
Сообщение от chip email(ok) on 16-Мрт-06, 18:17 
>>>Добрый день!
>>>
>>>С начала в кратце опишу собсно сам проблемный скрипт.
>>>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
>>
>>ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным
>>+ для openssh можно написать соотвествующий restriction, который позволит запускать исключительно
>>определенный диапазон команд.
>>
>>ps: в качестве замены su <=> sudo
>
>Мм.. не совсем понял. Можно примерчик? Желательно близкий к тому, что я
>привел в исходном посте.

man ssh
man ssh-keygen

Создаете пару RSA ключей для пользователя. Далее копируете публичный ключ на машину (в ~/.ssh/authorized_keys), на которую ходит rsync. Далее аналогично Вашей схеме, только без expect.

ps: дополнительно в authorized_keys можно указать ограничения для данного публичного ключа.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "Expect. Скрипт виснет.. Похоже, что навсегда :("  
Сообщение от GeKa email(??) on 16-Мрт-06, 18:50 
>>>>Добрый день!
>>>>
>>>>С начала в кратце опишу собсно сам проблемный скрипт.
>>>>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
>>>
>>>ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным
>>>+ для openssh можно написать соотвествующий restriction, который позволит запускать исключительно
>>>определенный диапазон команд.
>>>
>>>ps: в качестве замены su <=> sudo
>>
>>Мм.. не совсем понял. Можно примерчик? Желательно близкий к тому, что я
>>привел в исходном посте.
>
>man ssh
>man ssh-keygen
>
>Создаете пару RSA ключей для пользователя. Далее копируете публичный ключ на машину
>(в ~/.ssh/authorized_keys), на которую ходит rsync. Далее аналогично Вашей схеме, только
>без expect.
>
>ps: дополнительно в authorized_keys можно указать ограничения для данного публичного ключа.

Собсно я так и делаю. Только использую DSA. Но я храню закрытый ключ (по ряду причин) в доступном для пользовтелей месте и поэтому он зашифрован. Т.ч. полюбому надо вводить пароль (вернее "passphrase"). Т.ч. expect тут все-таки нужен.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "Expect. Скрипт виснет.. Похоже, что навсегда :("  
Сообщение от chip email(ok) on 16-Мрт-06, 19:10 
>>>>>Добрый день!
>>>>>
>>>>>С начала в кратце опишу собсно сам проблемный скрипт.
>>>>>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
>>>>
>>>>ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным
>>>>+ для openssh можно написать соотвествующий restriction, который позволит запускать исключительно
>>>>определенный диапазон команд.
>>>>
>>>>ps: в качестве замены su <=> sudo
>>>
>>>Мм.. не совсем понял. Можно примерчик? Желательно близкий к тому, что я
>>>привел в исходном посте.
>>
>>man ssh
>>man ssh-keygen
>>
>>Создаете пару RSA ключей для пользователя. Далее копируете публичный ключ на машину
>>(в ~/.ssh/authorized_keys), на которую ходит rsync. Далее аналогично Вашей схеме, только
>>без expect.
>>
>>ps: дополнительно в authorized_keys можно указать ограничения для данного публичного ключа.
>
>Собсно я так и делаю. Только использую DSA. Но я храню закрытый
>ключ (по ряду причин) в доступном для пользовтелей месте и поэтому
>он зашифрован. Т.ч. полюбому надо вводить пароль (вернее "passphrase"). Т.ч. expect
>тут все-таки нужен.

Ничто не мешает создать ключи с пустими passphrase. Но нужно помнить, что нужно создать продуманные ограничения в authorized_keys

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру