LinuxForum.Fans
Тема

Скрипт Sh с командой su -

Автор: xstan 19 сообщений 2615 просмотров
05.02.2015 09:41 #413136

В общем такая задача.
Сделать скрипт запуска софта на удаленном сервере.
пример
su - USER -c "ssh -X server" # На локальной машине перейти под юзера и подключится на удаленны сервак
# ssh -X USER@server не прокатит. На удаленной машине пароль USER не известен, но сделан доступ по .ssh/authorized_keys
/bin/proga #выполняем нужную программу.

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

Как сделать чтобы вторая часть выполнялась именно на удаленной?

05.02.2015 10:13 #413139
"xstan" написал:
/bin/proga #выполняем нужную программу.

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

text

DISPLAY=:0.0 /bin/proga
05.02.2015 10:18 #413141
"xstan" написал:
На удаленной машине пароль USER не известен
с какого перепугу?

[console]echo $USER[/console]
сделайте.
"xstan" написал:
su - USER -c "ssh -X server" # На локальной машине перейти под юзера и подключится на удаленны сервак

используйте sudo, а не su.

05.02.2015 10:25 #413143
"drBatty" написал:
с какого перепугу?

ни чего удивителнього док, человеку дали учетку и сказали используй для атворизации ключик и все, это нормальная практика. :-)

05.02.2015 10:28 · отредактировано #413144

Просто сделай так:

text
# ssh -X -i /home/USER/.ssh/id_rsa USER@server

Соответственно /home/USER/.ssh/id_rsa - путь к файлу ключа (private key) пользователя. Никаких su или sudo здесь не требуется.

05.02.2015 10:53 #413145
"drBatty" написал:
используйте sudo, а не su.

sudo просит пароль от учетки которой выполняем скрипт (я выполняю скрипт не от учетки USER)

"Vascom" написал:
Соответственно /home/USER/.ssh/id_rsa - путь к файлу ключа (private key) пользователя.

тоже самое, мне не даст прочитать .ssh другого юзера.

Суть.
Запустить скрипт от USER1
В скрипле перейти под USER от его имени подключится на удаленный сервак и на том сервере запустить программу с пробросом иксов на локальную.

Проблема заключается в том что как выполнить программу именно на удаленно компе.

[USER1@local]$ ./SKRIPT
Password: Вбиваем пароль от локальной учетки USER
---Переходит на server
[USER@server]$
[USER@server]$ logout
--Возвращается на локальную машину
[USER1@local]$ # Здесь выполняет скрипт.

Т.е. продолжает выполнение скрипта, а надо чтобы он продолжал на том хосте.

05.02.2015 11:01 · отредактировано #413146

Так бы и говорил сразу, что не от рута, а от другого пользователя надо.

То есть ты хочешь запустить скрипт локально, в нём перейти на другой сервер, потом вернуться, но чтобы скрипт продолжил работать на сервере?
Скорее всего это невозможно и тебе надо переосмыслить что ты хочешь получить.

05.02.2015 11:18 · отредактировано #413147
"i2ks" написал:
ни чего удивителнього док, человеку дали учетку и сказали используй для атворизации ключик и все, это нормальная практика.
т.е. whoami и $USER религия не позволяет?

И потом, КАК без имени на сервер-то зайти? Что за бред?
"xstan" написал:
sudo просит пароль от учетки которой выполняем скрипт (я выполняю скрипт не от учетки USER)

NOPASSWD and PASSWD

By default, sudo requires that a user authenticate him or herself before running a command. This behavior can be modi‐
fied via the NOPASSWD tag. Like a Runas_Spec, the NOPASSWD tag sets a default for the commands that follow it in the
Cmnd_Spec_List. Conversely, the PASSWD tag can be used to reverse things. For example:

ray rushmore = NOPASSWD: /bin/kill, /bin/ls, /usr/bin/lprm

would allow the user ray to run /bin/kill, /bin/ls, and /usr/bin/lprm as root on the machine rushmore without authenti‐
cating himself. If we only want ray to be able to run /bin/kill without a password the entry would be:

ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

Note, however, that the PASSWD tag has no effect on users who are in the group specified by the exempt_group option.

By default, if the NOPASSWD tag is applied to any of the entries for a user on the current host, he or she will be able
to run “sudo -l” without a password. Additionally, a user may only run “sudo -v” without a password if the NOPASSWD tag
is present for all a user's entries that pertain to the current host. This behavior may be overridden via the verifypw
and listpw options.
"xstan" написал:
Т.е. продолжает выполнение скрипта, а надо чтобы он продолжал на том хосте.

[console]user1$ sudo -u user2 ssh user3@server command[/console]
конечно нужно разрешить выполнение для user1 от имени user2 в /etc/sudoers локального(если user1≠root). user3 это имя пользователя на удалённом компе.

"Vascom" написал:
Скорее всего это невозможно
легко.
text
#!/bin/bash

command &

05.02.2015 11:21 · отредактировано #413149

drBatty, в твоём варианте скрипт запускает что-то на сервере, а потом выходит. Это не соответствует тому, что описал топикстартер. У него сперва выходим, затем продолжаем работу самого скрипта на сервере.

05.02.2015 11:24 #413150
"Vascom" написал:
потом вернуться, но чтобы скрипт продолжил работать на сервере?

Возвращаться не надо.
Я привел для примера, что когда делаю логаут скрипт выполняется на локальной.

[console]
[USER1@local]$ su - USER
Пароль:
[USER@local]$ ssh -X server
[USER@server]$ /bin/proga
[/console]

Через консоль все работает, как это сделать в скрипте.

05.02.2015 11:27 #413151

Можно просто запустить команду на сервере

text
ssh -X server /bin/proga

Это тебе нужно?

05.02.2015 11:34 #413153

"drBatty" написал:
И потом, КАК без имени на сервер-то зайти? Что за бред?
почему берд, имя берется того пользваотеля под которым вы работаете.
если имя user
то
ssh host или ssh user@host , одно и то же будет
05.02.2015 12:25 · отредактировано #413159

"Vascom" написал:
в твоём варианте скрипт запускает что-то на сервере, а потом выходит. Это не соответствует тому, что описал топикстартер. У него сперва выходим, затем продолжаем работу самого скрипта на сервере.
этот мой скрипт
text
#!/bin/bash
command &

нужно на сервере запускать. И command так на том сервере и будет работать. Конечно желательно её от терминала отвязать, или юзать screen(1).

"xstan" написал:
Через консоль все работает, как это сделать в скрипте.
пропишите разрешение в sudo
text
USER1 local=(USER) NOPASSWD: /usr/bin/ssh USER@server command

тогда можно сделать
[console]USER1@local$ sudo -u USER /usr/bin/ssh USER@server command
[/console]

"i2ks" написал:
почему берд, имя берется того пользваотеля под которым вы работаете.
и оно по вашему "не известно"?

"i2ks" написал:
sh host или ssh user@host , одно и то же будет
лично я такие вещи прописываю в ~/.ssh/config
05.02.2015 13:12 #413171

"drBatty" написал:
и оно по вашему "не известно"?
ни кто не говорит то что "оно" не известно.

"drBatty" написал:
лично я такие вещи прописываю в ~/.ssh/config
ну или так
05.02.2015 13:31 #413174
"i2ks" написал:
ни кто не говорит то что "оно" не известно.
ну если известно, то в чём проблема-то? Зачем вообще нужен этот пароль на той машине, если вход УЖЕ осуществлён?
"i2ks" написал:
лично я такие вещи прописываю в ~/.ssh/config

ну или такугу. Ну можно долбаться и так, да. Я не против, если ТСу нравится кучу букв вбивать, то пусть страдает. Однако вангую, что ТСу не нравится, иначе зачем он скрипты осиливает?

06.02.2015 07:27 #413274
"Vascom" написал:
Можно просто запустить команду на сервере
ssh -X server /bin/proga
Это тебе нужно?

Сделал так.

[console]
su - USER -c "ssh -X server /bin/proga"
[/console]

Все работает. Просто надо было все сразу объединить в одну команду. Чтобы не было прерывания.

Всем спасибо.

06.02.2015 09:26 #413290

"xstan" написал:
su -
мне этот вариант не нравится тем, что пароль постоянно надо вбивать. Ну и у su есть некоторые проблемы с наследованием окружения. Я рад, что вас эти проблемы(пока) не коснулись.
06.02.2015 14:17 #413361
"drBatty" написал:
мне этот вариант не нравится тем, что пароль постоянно надо вбивать

можно сделать что и не надо вбивать пасс, но это не без опасно.

06.02.2015 14:21 #413363

"xstan" написал:
можно сделать что и не надо вбивать пасс, но это не без опасно.
как раз наоборот: если не вбивать пароль, то его не украдут. И делится не нужно. Ну и хранить в открытом виде тоже.

Просто нужно прописать ТОЛЬКО нужную команду, что-бы нельзя было другие выполнять.
Войдите или зарегистрируйтесь, чтобы ответить.