URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5241
[ Назад ]

Исходное сообщение
"Expect. Скрипт виснет.. Похоже, что навсегда :("

Отправлено GeKa , 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'ом.. Версий нет.. Может кто подскажет? :/


Содержание

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

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

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


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

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


"Expect. Скрипт виснет.. Похоже, что навсегда :("
Отправлено chip , 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 можно указать ограничения для данного публичного ключа.


"Expect. Скрипт виснет.. Похоже, что навсегда :("
Отправлено GeKa , 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 тут все-таки нужен.


"Expect. Скрипт виснет.. Похоже, что навсегда :("
Отправлено chip , 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