Добрый день!С начала в кратце опишу собсно сам проблемный скрипт.
Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
Выглядит он примерно так:#!/usr/local/bin/expect -f
...
set timeout 600
set timedout 1while {$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'ом.. Версий нет.. Может кто подскажет? :/
>Добрый день!
>
>С начала в кратце опишу собсно сам проблемный скрипт.
>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователемИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным + для openssh можно написать соотвествующий restriction, который позволит запускать исключительно определенный диапазон команд.
ps: в качестве замены su <=> sudo
>>Добрый день!
>>
>>С начала в кратце опишу собсно сам проблемный скрипт.
>>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
>
>ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным
>+ для openssh можно написать соотвествующий restriction, который позволит запускать исключительно
>определенный диапазон команд.
>
>ps: в качестве замены su <=> sudoМм.. не совсем понял. Можно примерчик? Желательно близкий к тому, что я привел в исходном посте. В чем смысл замены su на sudo? И при чем тут RSA?
>>>Добрый день!
>>>
>>>С начала в кратце опишу собсно сам проблемный скрипт.
>>>Скрипт запускается под рутом и, всего навсего, запускает rsync под другим пользователем
>>
>>ИМХО, решение с RSA public/private keys выглядит в данном случае более привлекательным
>>+ для openssh можно написать соотвествующий restriction, который позволит запускать исключительно
>>определенный диапазон команд.
>>
>>ps: в качестве замены su <=> sudo
>
>Мм.. не совсем понял. Можно примерчик? Желательно близкий к тому, что я
>привел в исходном посте.man ssh
man ssh-keygenСоздаете пару RSA ключей для пользователя. Далее копируете публичный ключ на машину (в ~/.ssh/authorized_keys), на которую ходит rsync. Далее аналогично Вашей схеме, только без expect.
ps: дополнительно в authorized_keys можно указать ограничения для данного публичного ключа.
>>>>Добрый день!
>>>>
>>>>С начала в кратце опишу собсно сам проблемный скрипт.
>>>>Скрипт запускается под рутом и, всего навсего, запускает 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 тут все-таки нужен.
>>>>>Добрый день!
>>>>>
>>>>>С начала в кратце опишу собсно сам проблемный скрипт.
>>>>>Скрипт запускается под рутом и, всего навсего, запускает 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