LinuxForum.Fans
Тема

Вызов сриптов с правами root

Автор: amorfis74 15 сообщений 2691 просмотров
#243268

Всем доброго времени суток!!!)
Есть вроде маленькая проблем ка, но ни как ее ни могу уже долго решить, а по времени решения ее уже "ГОРИТ"....

Запускаю свой скрипт, соединение прошло успешно, но с офисом не соединился для связи использую данную строку:
............................................................

echo "Соединяемся с сервером ... "
COMA_START_FUSE='sshfs '$NAME_USER'@85.###.###.253:/home/user/change /home/'$NAME_USER'/change -o nonempty'
# echo $COMA_START_FUSE
if !(test -d /home/$NAME_USER/change/magtest) ;then
if ! ( $COMA_START_FUSE ) ; then
my_kill
err_connect
fi
fi

в этом месте скрипт с начало встал, подождал минут 10, вырубил терминал;
запустил еще раз на выполнение, интернет подключился опять;
дальше он мне выдал connect reset by peer, не вопрос перезапустим)- все родной для только для тебя);
запустил еще раз на выполнение, интернет подключился опять, жду 10 минут все стоит на одном месте..

Ладно идем дальше:
подключаем через терминал ручками:
ifup ppp0
все завелось
подключаемся через ssh
ssh user@IP-адрес ---- ключи в директории клиента (/home/user/.ssh/id_rsa.pub) и на сервере(home/user/.ssh/authorized_keys)присутствуют..
Ответ на команду долгое зависание...

Запустил так еще раз
ssh -v user@IP-адрес (-v ключ что бы видеть детально подсоединение)
Либо сразу пишет Connection closed by "мой ip", либо запрашивает пароль, ввожу и опять Connection closed by "мой ip", хотя не должен же, ключи присутствуют..

Пытаюсь просто без скрипта выполнить, предварительно конечно установив связь с интернетом:
sshfs '$NAME_USER'@85.###.###.223:/home/user/change /home/'$NAME_USER'/change -o nonempty'
выдает-
read: Connection reset by peer

Да и еще 1 нюанс ip-ник к которому подсоединяюсь это статический адрес--естественно при конекте он с начало заходит на модем, а потом уже на мой сервер убунты, но проброску порта сделана норм.
В чем проблема?

Через фтп если делать то мне надо будет писать писать скрипт на передачу фалов с фтп на нужный каталог удаленного ПК, откуда уже 1с автоматом забирает, потом отгружает обработку данных обратно на каталог предыдущий, и тут опять писать скрипт на отправку из этого каталога на фтп, потом уже ДК будет забирать от туда данные....
По моему удаление геморроя через задний проход..

Форумчане выручайте!!!

#243271

По скрипту:
— первой строкой принято указывать что-то вроде #!/bin/bash, хотя вы, вероятно, показали лишь часть скрипта;
— в строке, где COMA_START_FUSE, с кавычками явно напутали;
—

text

if !(test -d /home/$NAME_USER/change/magtest) ;then
if ! ( $COMA_START_FUSE ) ; then

конструкция странная, да и с пробелами что-то не в порядке;
— сначала настройте обычное подключение по ssh, чтобы быть уверенным, что с ним нет проблем.

#243278
"Lupo Alberto" написал:
хотя вы, вероятно, показали лишь часть скрипта;

ессно, определения функций нет. вот этих:

"amorfis74" написал:
my_kill
err_connect
"amorfis74" написал:
Форумчане выручайте!!!

телепаты в отпуске.

#243557

сначала настройте обычное подключение по ssh, чтобы быть уверенным, что с ним нет проблем.

не надо читать через строчку;
для тех кто на бронепоезде еще раз

Ладно идем дальше:
подключаем через терминал ручками:
ifup ppp0
все завелось
подключаемся через ssh
ssh user@IP-адрес ---- ключи в директории клиента (/home/user/.ssh/id_rsa.pub) и на сервере(home/user/.ssh/authorized_keys)присутствуют..
Ответ на команду долгое зависание...
Запустил так еще раз
ssh -v user@IP-адрес (-v ключ что бы видеть детально подсоединение)
Либо сразу пишет Connection closed by "мой ip", либо запрашивает пароль, ввожу и опять Connection closed by "мой ip", хотя не должен же, ключи присутствуют..

Ладно проехали, спустя долгие страдания))..все таки соединился через ssh!
Попытался монтировать удаленную файловую систему через sshfs, то же получилось,
хз, но до этого месяц мучился, топтался на месте не мог подсоединится...
Мжб, было дело в модеме, но на балансе были деньги и до этого и настроен он норм...

Еще один вопросик, подскажите как запустить скрипт на выполнение от root, у меня в icewm прописаны горячие клавиши, при нажатии которых выполняется скрипт, но в скрипте есть команда которая должна выполнятся под рутом -> ifup ppp0 , иначе терминал выводит ошибку что не знает данной команды.
Пробовал в icewm в файле key (там и прописаны клавиши вызова скрипта) вписать gksu, вот так: key "Ctrl+Alt+c" gksu дальше путь до скрипта, но при нажатии да он запрашивает пароль рута, но все равно не воспринимает все равно команду ifup ppp0... Может быть есть другие способы вызова команд из под рута???

#243559
"amorfis74" написал:
для тех кто на бронепоезде еще раз

...и где там видно, что соединение по ssh произошло?
Ответите завтра — на сегодня ваш аккаунт заблокирован, не нужно хамить людям, к которым обращаетесь за помощью.

#243560
"amorfis74" написал:
не надо читать через строчку;
для тех кто на бронепоезде еще раз

Сам с бронепоезда сойди и -
1 - С второго сообщения на форуме хамить? Я предупредил, второго раза не будет.
1 - Научись оформлять сообщения понятно для других, bbcode если что работает, тэг code пользуй, тарабарщину читать никому не охота.
2 - Рекомендации по поиску информации, и как правильно задавать вопросы.

#243743

Ответите завтра — на сегодня ваш аккаунт заблокирован, не нужно хамить людям, к которым обращаетесь за помощью.

Ой как мило)), а главное по делу и по вопросу!!!

Пардонте ВАШЕ БЛАГОРОДИЕ, конечно, но когда месяц помучаешься с подключением и при том знаешь что этот скрипт работает на деле, а тебя пишут сразу фразы типа:

"drBatty" написал:

телепаты в отпуске.

или задают вопросы не к месту

"Lupo Alberto" написал:
— первой строкой принято указывать что-то вроде #!/bin/bash, хотя вы, вероятно, показали лишь часть скрипта;
— в строке, где COMA_START_FUSE, с кавычками явно напутали;

Хамством в вашем лице являлось не желание прочитать дальше 2 строчек

"Lupo Alberto" написал:
...и где там видно, что соединение по ssh произошло?
"amorfis74" написал:
ssh -v user@IP-адрес (-v ключ что бы видеть детально подсоединение)
Либо сразу пишет Connection closed by "мой ip", либо запрашивает пароль, ввожу и опять Connection closed by "мой ip"
я писал что не мог подсоединится как раз
Хм...может быть я пишу
"newzenon" написал:
тарабарщину
но по моему я даже построчно писал как что делал, не пытаясь захламить форум чисто кодом...
Не из тех кто любит вот так
text
export NAME_MAG="mag4"
export NAME_USER="user"
LOAD_OST=0
SEND_REPORT=0
VR=0
CIKL=0
umask 000

wvdial 2>/dev/null & sleep 10

err_connect() { # clear echo "Не удается подключиться к серверу в офисе." echo "Это может быть связано с временными проблемами в работе интернет" echo "Попробуйте повторить соединение через некоторое время" echo "Для завершения нажмите Enter" read VR exit }

my_kill() { if ( test -d /home/$NAME_USER/change/magtest ) ; then fusermount -u /home/$NAME_USER/change fi if ( ps -A | grep wvdial > /dev/null ) ; then killall wvdial 2>/dev/null fi if ( ps -A | grep pppd ) > /dev/null ; then killall pppd 2>/dev/null fi }

echo "" echo "Запустили обмен данными с офисом"

echo "Если вы хотите получить свежие остатки просто нажмите Enter" echo "Если остатки не нужны, наберите \"0\" и нажмите Enter" read LOAD_OST if [ "$LOAD_OST" != "0" ] ; then LOAD_OST=1 fi

echo "Соединяемся с сервером ... " COMA_START_FUSE='sshfs '$NAME_USER'@85.###.###.253:/home/user/change /home/'$NAME_USER'/change -o nonempty' # echo $COMA_START_FUSE if !(test -d /home/$NAME_USER/change/magtest) ;then if ! ( $COMA_START_FUSE ) ; then my_kill err_connect fi fi

echo "Подключение к серверу выполнено"

# проверим нет ли файла с обновлением программ и если есть, то запустим его и выйдем из текущей программмы. if test -s /home/$NAME_USER/change/$NAME_MAG/update ; then echo "Найден файл с обновлением программы. Будет выполнено обновление." cp /home/$NAME_USER/change/$NAME_MAG/update /home/$NAME_USER/my_scripts/ rm /home/$NAME_USER/change/$NAME_MAG/update /home/$NAME_USER/my_scripts/update rm /home/$NAME_USER/my_scripts/update fi

if test -s /home/$NAME_USER/change/$NAME_MAG/message ; then echo "" echo "!!! Вам пришло новое сообщение из офиса:" echo "" cat /home/$NAME_USER/change/$NAME_MAG/message echo "" echo "Для продолжения обработки нажмите Enter" read VR rm -f /home/$NAME_USER/change/$NAME_MAG/message fi

# сначала отправим в офис отчет, если он есть if test -s /var/Exchange/report.txt ; then echo "Обнаружили новый отчет о продажах. Отправляем на сервер." cp /var/Exchange/report.txt /home/$NAME_USER/change/$NAME_MAG/ rm /var/Exchange/report.txt SEND_REPORT=1 echo "Отчет отправлен." fi

# Теперь сформируем отчет с запросом действий от офисного компьютера обнулим файл задания echo > /home/$NAME_USER/change/$NAME_MAG/job.txt

# если есть отчет о продажах, то укажем это в задании if [ "$SEND_REPORT" = "1" ] ; then echo "SEND_REPORT " >> /home/$NAME_USER/change/$NAME_MAG/job.txt fi

# если нужны остатки то так же укажем это в задании if [ "$LOAD_OST" = "1" ] ; then echo "LOAD_OST " >> /home/$NAME_USER/change/$NAME_MAG/job.txt echo "Выполнили запрос остатков товара" fi

# все готово и дадим команду для выполнения задания удаленным компьютером touch /home/$NAME_USER/change/job_$NAME_MAG

# сделаем небольшую паузу до того, как искать ответные данные на сервере echo -n "Ждем результат обработки от сервера "

CIKL=0 while [ $CIKL -lt 10 ] do CIKL=`expr $CIKL + 1` sleep 3 echo -n "." done

CIKL=0 while [ $CIKL -lt 50 ] do CIKL=`expr $CIKL + 1` sleep 5 echo -n '.' if test -f /home/$NAME_USER/change/$NAME_MAG/rez.txt ; then echo '' mv /home/$NAME_USER/change/$NAME_MAG/rez.txt /home/$NAME_USER/my_scripts/ break fi done

#разбираем что тут нам прислали в качестве ответа с сервака if test -f /home/$NAME_USER/my_scripts/rez.txt ; then

# проверим сформировались ли остатки и если да,то загрузим if [ $LOAD_OST = "1" ] && [ `less /home/$NAME_USER/my_scripts/rez.txt | grep SEND_OST=1` ] ; then echo "Загружаем остатки." if mv /home/$NAME_USER/change/$NAME_MAG/goods.txt /var/Exchange/ ; then if mv /home/$NAME_USER/change/$NAME_MAG/goods.flz /var/Exchange/ ; then echo "Новые остатки загружены в программу." fi fi fi

# если отправляли отчет, то проверим нормально ли он загрузился if [ $SEND_REPORT = "1" ] ; then if [ `less /home/$NAME_USER/my_scripts/rez.txt | grep GET_REPORT=1` ] ; then echo "Отправленный вами отчет был принят в офисе." else echo "!!! При загрузке отчета в офисе возникли проблемы." echo "!!! До устранения этой проблемы остатки получаемые вами будут не актуальны." fi fi

# удалим у себя файл ответа сервера rm /home/$NAME_USER/my_scripts/rez.txt

my_kill

echo "Обмен с офисом завершен" echo "Для завершения работы нажмите Enter" read vr exit 0

fi

my_kill

echo "" echo "!!!! Что то пошло не так и не удалось дождаться ответа от сервера" echo "Для завершения работы нажмите Enter" read vr

и в низу такая подпись, что то не работает :D
спросил конкретно по интересующему вопросу..

Еще раз звените меня ХАМА!!!

А теперь по делу, еще раз

"amorfis74" написал:
Может быть есть другие способы вызова скрипта с правами рута???

С уважением ваш читатель!!! :)

#243747
"amorfis74" написал:
Может быть есть другие способы вызова скрипта с правами рута???

Настроить sudo.
P.S. Вы с сарказмом не переусердствуйте. Разумеется, если хотите посещать форум и получать здесь поддержку.

#243794

amorfis74, вот ты странный человек, кому интересен тут твой скрипт в контексте монтирования sshfs?
С простого начни - просто в консоли смонтируй - работает (если нет -debug и выхлоп сюда)? Потом дальше по цепочке.

#243945

Ребят повторю вопрос:

"amorfis74" написал:
подскажите как запустить скрипт на выполнение от root, у меня в icewm прописаны горячие клавиши, при нажатии которых выполняется скрипт, но в скрипте есть команда которая должна выполнятся под рутом -> ifup ppp0 , иначе терминал выводит ошибку что не знает данной команды.
Пробовал в icewm в файле key (там и прописаны клавиши вызова скрипта) вписать gksu, вот так: key "Ctrl+Alt+c" gksu дальше путь до скрипта, но при нажатии да он запрашивает пароль рута, но все равно не воспринимает все равно команду ifup ppp0... Может быть есть другие способы вызова команд что бы выполнялись команды с провами рута???

gksu использовал для вызова скрипта при нажатии определенных клавиш
Смысл в том что бы кассир нажимал комбинацию клавиш (пример:Ctrl+Alt+c), при которых будет выполняться скрипт.
Кассира не должен вообще ни как касаться терминальной системы и водить что то..Он просто работает с ПО Денси:Касса, а для передачи данных с офисом использует этот скрипт...

#243967
"amorfis74" написал:
Ребят повторю вопрос:
"Lupo Alberto" написал:
Настроить sudo.

Посредством команды sudo можно настроить запуск от имени другого пользователя ограниченного числа команд (можно всех) на ограниченном числе хостов (можно на любом компьютере), в том числе и без ввода пароля для определённых пользователей или групп.
Т.е. в вашем случае в скрипте вместо команды ifup ppp0 просто будет sudo ifup ppp0. Но, повторюсь, нужно произвести необходимые настройки.
Например, чтобы разрешить любому пользователю из группы kassir на определённом компьютере host1.org выполнить указанную команду без ввода пароля нужно в файл /etc/sudoers добавить строку

text

%kassir host1.org = NOPASSWD: /sbin/ifup ppp0

Редактирование файла /etc/sudoers настоятельно рекомендуется выполнять с помощью команды visudo.

#243997
text
sshfs '$NAME_USER'@85.###.###.253:/home/user/change /home/'$NAME_USER'/change -o nonempty'

Вот это в консоли работает?

#244002

"newzenon" написал:
sshfs '$NAME_USER'@85.###.###.253:/home/user/change /home/'$NAME_USER'/change -o nonempty'
Вот это в консоли работает?
да конечно!
Буду настраивать sudo, результат напишу. Спасибо за доп информацию, с командой sudo в такой вариации не работал еще...
#244013
"amorfis74" написал:
да конечно!

Ну тогда это не вопрос sshfs, а вопрос написания обертки.

#244020

До этого были проблемы именно с SSHFS, решилось само собой..

Войдите или зарегистрируйтесь, чтобы ответить.