Удаленно запустить shell-script через java-code
От: spazieren  
Дата: 14.03.16 08:10
Оценка:
Добрый день!
Сразу оговорюсь, я еще не волшебник, я только учусь.
И вообще я тестер, но сейчас я делаю первые шаги на пути в автоматизацию тестирования.
Элементарная Java более или менее освоена, но сейчас возникла проблема.
Мне нужно запустить shell-script, который находится на удаленном сервере.

То есть ручками это происходит так:
Через putty,
создается подключение к серверу,
потом нужно залогиниться под своим логином/паролем,
потом через команду sudo rootsh -i -u user_name, заходим под пользователем, у которого есть права на запуск этих скриптов.
Потом чешем в папку, где они лежат и оттуда запускаем.

То есть результаты в гугле по запросу "run shell-scripts via java-code" уже мною изучены, но я все равно не понимаю, возможно ли их запускать, если у нас тут такая многоуровневая система заходов.
По аналогии с подключением к базе, я подозреваю, что можно написать какую-то строку, которая и будет подключаться по нужному адресу, с нужными логинами и паролями.
Но я, честно говоря, даже не знаю как правильно сформулировать запрос, чтобы грамотно загуглилось.
Благодарность моя не будет знать границ, если кто-нибудь укажет мне решение проблемы или, хотя бы направление поисков.
Re: Удаленно запустить shell-script через java-code
От: sambl4 Россия  
Дата: 14.03.16 08:13
Оценка:
Здравствуйте, spazieren , Вы писали:

S>Через putty,

S>создается подключение к серверу,
S>потом нужно залогиниться под своим логином/паролем,
S>потом через команду sudo rootsh -i -u user_name, заходим под пользователем, у которого есть права на запуск этих скриптов.
S>Потом чешем в папку, где они лежат и оттуда запускаем.

В составе putty есть plink.exe, который собственно и занимается удалённым выполнением команд. Смотрели его возможности?
Re: Удаленно запустить shell-script через java-code
От: vsb Казахстан  
Дата: 14.03.16 08:19
Оценка:
Рекомендую следующий вариант.

На сервере разрешить вход по ключу пользователю 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 с нужными параметрами, как это делать, я думаю вы знаете или разберётесь. Всё остальное надо настраивать скриптами на удалённом сервере.
Отредактировано 14.03.2016 8:20 vsb . Предыдущая версия .
Re[2]: Удаленно запустить shell-script через java-code
От: spazieren  
Дата: 14.03.16 08:38
Оценка:
Здравствуйте, 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
От: bosyak  
Дата: 14.03.16 14:42
Оценка:
На юникс системы можно зайти любым пользователем, главное что бы это ему было разрешено. Это очень легкое требование — если кто-то будет против.
Чтобы не набирать пароли, можно аутентифицироваться открытым ключем. Первое что попалось http://wiki.diphost.ru/SSH-AUTH-KEYS
Тогда пароль нужно будет набирать один раз — после загрузки твоего компьютера.

Запустить любую команду можно, без входа на удаленный комп, можно будет вот так: ssh myuser@somehost.ru "/etc/init.d/tomcat restart"
Копировать файлы можно при помощи rsync (синхронизация) или scp (копирование)

Пользователю можно разрешить любые команды, включая те, которые требуют root.

Рекомендую использовать http://saltstack.com/ или аналоги для всего

И поставь на свой рабочий комп какую-нибудь ubuntu... будет полезнее и проще.
Re: Удаленно запустить shell-script через java-code
От: bosyak  
Дата: 14.03.16 14:49
Оценка:
Капец... столько набирал и не отправилось?

Еще раз коротко и только тезисы уже
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
От: Antei США  
Дата: 14.03.16 21:17
Оценка:
Здравствуйте, spazieren , Вы писали:

S>Мне нужно запустить shell-script, который находится на удаленном сервере.


ssh-library-for-java
Exec.java]

я использовал какую-то либу давно, вспомню название напишу
Отредактировано 14.03.2016 21:45 Antei . Предыдущая версия .
ssh java
Re[2]: Удаленно запустить shell-script через java-code
От: Evgeny.Panasyuk Россия  
Дата: 14.03.16 23:18
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>В Java просто запустить ssh как отдельный процесс. Что-то вроде "ssh user_name@server /path/to/script.sh". Вот и всё. Это для юникса, что там в путти, я не знаю, скорее всего что-то похожее. Вообще лучше такие задачи делать из-под юникса, венда для этого только препоны будет чинить.


В комплекте с Git для Windows идёт и ssh и scp.
Re: Удаленно запустить shell-script через java-code
От: RavshanKos Россия  
Дата: 26.03.16 16:48
Оценка:
S>Мне нужно запустить shell-script, который находится на удаленном сервере.
http://www.jcraft.com/jsch/
Re: Удаленно запустить shell-script через java-code
От: slavikca  
Дата: 26.03.16 17:19
Оценка:
Вот здесь чел пишет про это, с примерами:
http://automation-remarks.com/ssh/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.