Добрый день!
Сразу оговорюсь, я еще не волшебник, я только учусь.
И вообще я тестер, но сейчас я делаю первые шаги на пути в автоматизацию тестирования.
Элементарная Java более или менее освоена, но сейчас возникла проблема.
Мне нужно запустить shell-script, который находится на удаленном сервере.
То есть ручками это происходит так:
Через putty,
создается подключение к серверу,
потом нужно залогиниться под своим логином/паролем,
потом через команду sudo rootsh -i -u user_name, заходим под пользователем, у которого есть права на запуск этих скриптов.
Потом чешем в папку, где они лежат и оттуда запускаем.
То есть результаты в гугле по запросу "run shell-scripts via java-code" уже мною изучены, но я все равно не понимаю, возможно ли их запускать, если у нас тут такая многоуровневая система заходов.
По аналогии с подключением к базе, я подозреваю, что можно написать какую-то строку, которая и будет подключаться по нужному адресу, с нужными логинами и паролями.
Но я, честно говоря, даже не знаю как правильно сформулировать запрос, чтобы грамотно загуглилось.
Благодарность моя не будет знать границ, если кто-нибудь укажет мне решение проблемы или, хотя бы направление поисков.
Re: Удаленно запустить shell-script через java-code
Здравствуйте, spazieren , Вы писали:
S>Через putty, S>создается подключение к серверу, S>потом нужно залогиниться под своим логином/паролем, S>потом через команду sudo rootsh -i -u user_name, заходим под пользователем, у которого есть права на запуск этих скриптов. S>Потом чешем в папку, где они лежат и оттуда запускаем.
В составе putty есть plink.exe, который собственно и занимается удалённым выполнением команд. Смотрели его возможности?
Re: Удаленно запустить shell-script через java-code
На сервере разрешить вход по ключу пользователю user_name. Это позволит обойтись без промежуточного пользователя и вызова sudo, а также без ввода пароля в ssh.
В Java просто запустить ssh как отдельный процесс. Что-то вроде "ssh user_name@server /path/to/script.sh". Вот и всё. Это для юникса, что там в путти, я не знаю, скорее всего что-то похожее. Вообще лучше такие задачи делать из-под юникса, венда для этого только препоны будет чинить.
Если разрешить вход по ключу пользователю user_name нельзя (долбанутые админы, например), то надо написать на сервере отдельный скрипт, который будет запускать sudo и всё остальное. Либо просто через sudo -u user_name /path/to/script.sh, если пароль sudo не просит, либо с помощью программы expect, если надо вводить пароль, реально надо запускать подпроцесс шелла, выполнять там какие-то команды. Но это уже самый большой геморрой и изврат.
Java тут в целом не при чём. От неё надо просто запустить ssh с нужными параметрами, как это делать, я думаю вы знаете или разберётесь. Всё остальное надо настраивать скриптами на удалённом сервере.
Здравствуйте, sambl4, Вы писали: S>В составе putty есть plink.exe, который собственно и занимается удалённым выполнением команд. Смотрели его возможности?
Нет, не смотрел. Спасибо. Иду Изучать.
Здравствуйте, vsb, Вы писали: vsb>Рекомендую следующий вариант. vsb>На сервере разрешить вход по ключу пользователю user_name. Это позволит обойтись без промежуточного пользователя и вызова sudo, а также без ввода пароля в ssh. vsb>В Java просто запустить ssh как отдельный процесс. Что-то вроде "ssh user_name@server /path/to/script.sh". Вот и всё. Это для юникса, что там в путти, я не знаю, скорее всего что-то похожее. Вообще лучше такие задачи делать из-под юникса, венда для этого только препоны будет чинить. vsb>Если разрешить вход по ключу пользователю user_name нельзя (долбанутые админы, например), то надо написать на сервере отдельный скрипт, который будет запускать sudo и всё остальное. Либо просто через sudo -u user_name /path/to/script.sh, если пароль sudo не просит, либо с помощью программы expect, если надо вводить пароль, реально надо запускать подпроцесс шелла, выполнять там какие-то команды. Но это уже самый большой геморрой и изврат. vsb>Java тут в целом не при чём. От неё надо просто запустить ssh с нужными параметрами, как это делать, я думаю вы знаете или разберётесь. Всё остальное надо настраивать скриптами на удалённом сервере.
Пароли, к сожалению, не отключить. Дикая секретность и все такое. Спасибо за ответ, буду дальше разбираться
Re: Удаленно запустить shell-script через java-code
На юникс системы можно зайти любым пользователем, главное что бы это ему было разрешено. Это очень легкое требование — если кто-то будет против.
Чтобы не набирать пароли, можно аутентифицироваться открытым ключем. Первое что попалось http://wiki.diphost.ru/SSH-AUTH-KEYS
Тогда пароль нужно будет набирать один раз — после загрузки твоего компьютера.
Запустить любую команду можно, без входа на удаленный комп, можно будет вот так: ssh myuser@somehost.ru "/etc/init.d/tomcat restart"
Копировать файлы можно при помощи rsync (синхронизация) или scp (копирование)
Пользователю можно разрешить любые команды, включая те, которые требуют root.
Еще раз коротко и только тезисы уже
1) разрешить пользователю вход
2) аутентифицироваться с помощью открытых ключей (первая ссылка в поиске http://wiki.diphost.ru/SSH-AUTH-KEYS)
3) выполенение команды на удаленной машине ssh user_name@some-host.ru "/etc/init.d/tomcat restart"
4) синхронизация файлов — rsync, копировние файлов scp
5) изучи и используй http://saltstack.com/
6) если будет нужно, ssh умеет туннелировать порты. Т.е. можно порт 80 на удаленной машине притащить к себе на 8080... и все запросы локально, будут бежать "туда"
Для запуска скприптов на удаленной машине, ява не нужна. Больше на трояна какого-то смахивает. Если тебе реально какой-то трюк нужен, вот есть вариант http://www.crashub.org/
Поставь себе ubuntu, будет легче и полезнее
Re: Удаленно запустить shell-script через java-code
Здравствуйте, vsb, Вы писали:
vsb>В Java просто запустить ssh как отдельный процесс. Что-то вроде "ssh user_name@server /path/to/script.sh". Вот и всё. Это для юникса, что там в путти, я не знаю, скорее всего что-то похожее. Вообще лучше такие задачи делать из-под юникса, венда для этого только препоны будет чинить.
В комплекте с Git для Windows идёт и ssh и scp.
Re: Удаленно запустить shell-script через java-code