В общем такая задача.
Сделать скрипт запуска софта на удаленном сервере.
пример
su - USER -c "ssh -X server" # На локальной машине перейти под юзера и подключится на удаленны сервак
# ssh -X USER@server не прокатит. На удаленной машине пароль USER не известен, но сделан доступ по .ssh/authorized_keys
/bin/proga #выполняем нужную программу.
Проблема в том что первая часть скрипта выполняется, на server переходит нормально, но запуск программы не происходит.
Видимо потому что вторая часть пытается выполнится на локальной машине.
Как сделать чтобы вторая часть выполнялась именно на удаленной?
Скрипт Sh с командой su -
/bin/proga #выполняем нужную программу.
если используется дисплей по умолчанию, то можно попробовать запустить так:
DISPLAY=:0.0 /bin/proga
с какого перепугу?На удаленной машине пароль USER не известен
[console]echo $USER[/console]
сделайте.
su - USER -c "ssh -X server" # На локальной машине перейти под юзера и подключится на удаленны сервак
используйте sudo, а не su.
с какого перепугу?
ни чего удивителнього док, человеку дали учетку и сказали используй для атворизации ключик и все, это нормальная практика. :-)
Просто сделай так:
# ssh -X -i /home/USER/.ssh/id_rsa USER@serverСоответственно /home/USER/.ssh/id_rsa - путь к файлу ключа (private key) пользователя. Никаких su или sudo здесь не требуется.
используйте sudo, а не su.
sudo просит пароль от учетки которой выполняем скрипт (я выполняю скрипт не от учетки USER)
Соответственно /home/USER/.ssh/id_rsa - путь к файлу ключа (private key) пользователя.
тоже самое, мне не даст прочитать .ssh другого юзера.
Суть.
Запустить скрипт от USER1
В скрипле перейти под USER от его имени подключится на удаленный сервак и на том сервере запустить программу с пробросом иксов на локальную.
Проблема заключается в том что как выполнить программу именно на удаленно компе.
[USER1@local]$ ./SKRIPT
Password: Вбиваем пароль от локальной учетки USER
---Переходит на server
[USER@server]$
[USER@server]$ logout
--Возвращается на локальную машину
[USER1@local]$ # Здесь выполняет скрипт.
Т.е. продолжает выполнение скрипта, а надо чтобы он продолжал на том хосте.
Так бы и говорил сразу, что не от рута, а от другого пользователя надо.
То есть ты хочешь запустить скрипт локально, в нём перейти на другой сервер, потом вернуться, но чтобы скрипт продолжил работать на сервере?
Скорее всего это невозможно и тебе надо переосмыслить что ты хочешь получить.
т.е. whoami и $USER религия не позволяет?ни чего удивителнього док, человеку дали учетку и сказали используй для атворизации ключик и все, это нормальная практика.
И потом, КАК без имени на сервер-то зайти? Что за бред?
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.
Т.е. продолжает выполнение скрипта, а надо чтобы он продолжал на том хосте.
[console]user1$ sudo -u user2 ssh user3@server command[/console]
конечно нужно разрешить выполнение для user1 от имени user2 в /etc/sudoers локального(если user1≠root). user3 это имя пользователя на удалённом компе.
легко.Скорее всего это невозможно
#!/bin/bash
command &
drBatty, в твоём варианте скрипт запускает что-то на сервере, а потом выходит. Это не соответствует тому, что описал топикстартер. У него сперва выходим, затем продолжаем работу самого скрипта на сервере.
потом вернуться, но чтобы скрипт продолжил работать на сервере?
Возвращаться не надо.
Я привел для примера, что когда делаю логаут скрипт выполняется на локальной.
[console]
[USER1@local]$ su - USER
Пароль:
[USER@local]$ ssh -X server
[USER@server]$ /bin/proga
[/console]
Через консоль все работает, как это сделать в скрипте.
Можно просто запустить команду на сервере
ssh -X server /bin/progaЭто тебе нужно?
почему берд, имя берется того пользваотеля под которым вы работаете.И потом, КАК без имени на сервер-то зайти? Что за бред?
если имя user
то
ssh host или ssh user@host , одно и то же будет
этот мой скриптв твоём варианте скрипт запускает что-то на сервере, а потом выходит. Это не соответствует тому, что описал топикстартер. У него сперва выходим, затем продолжаем работу самого скрипта на сервере.
#!/bin/bash
command &нужно на сервере запускать. И command так на том сервере и будет работать. Конечно желательно её от терминала отвязать, или юзать screen(1).
пропишите разрешение в sudoЧерез консоль все работает, как это сделать в скрипте.
USER1 local=(USER) NOPASSWD: /usr/bin/ssh USER@server commandтогда можно сделать
[console]USER1@local$ sudo -u USER /usr/bin/ssh USER@server command
[/console]
и оно по вашему "не известно"?почему берд, имя берется того пользваотеля под которым вы работаете.
лично я такие вещи прописываю в ~/.ssh/configsh host или ssh user@host , одно и то же будет
ни кто не говорит то что "оно" не известно.и оно по вашему "не известно"?
ну или таклично я такие вещи прописываю в ~/.ssh/config
ну если известно, то в чём проблема-то? Зачем вообще нужен этот пароль на той машине, если вход УЖЕ осуществлён?ни кто не говорит то что "оно" не известно.
лично я такие вещи прописываю в ~/.ssh/config
ну или такугу. Ну можно долбаться и так, да. Я не против, если ТСу нравится кучу букв вбивать, то пусть страдает. Однако вангую, что ТСу не нравится, иначе зачем он скрипты осиливает?
Можно просто запустить команду на сервере
ssh -X server /bin/proga
Это тебе нужно?
Сделал так.
[console]
su - USER -c "ssh -X server /bin/proga"
[/console]
Все работает. Просто надо было все сразу объединить в одну команду. Чтобы не было прерывания.
Всем спасибо.
мне этот вариант не нравится тем, что пароль постоянно надо вбивать. Ну и у su есть некоторые проблемы с наследованием окружения. Я рад, что вас эти проблемы(пока) не коснулись.su -
мне этот вариант не нравится тем, что пароль постоянно надо вбивать
можно сделать что и не надо вбивать пасс, но это не без опасно.
как раз наоборот: если не вбивать пароль, то его не украдут. И делится не нужно. Ну и хранить в открытом виде тоже.можно сделать что и не надо вбивать пасс, но это не без опасно.
Просто нужно прописать ТОЛЬКО нужную команду, что-бы нельзя было другие выполнять.