проблема запуска удаленного скрипта bash, перенаправления вывода локально - PullRequest
5 голосов
/ 25 января 2012

Я пытаюсь запустить скрипт удаленно (из скрипта bash), но у меня возникают проблемы с получением выходных данных для локального перенаправления для анализа. Запуск скрипта не проблема с:

ssh -n -l "$user" "$host" '/home/user/script.sh $params'

Однако я не могу зафиксировать вывод этого скрипта. Я пробовал следующее:

results=$(ssh -n -l "$user" "$host" '/home/user/script.sh $params')
results=`ssh -n -l "$user" "$host" '/home/user/script.sh $params'`
ssh -n -l "$user" "$host" '/home/user/script.sh $params' | grep "what I'm looking for"
ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file

Есть идеи?

Ответы [ 5 ]

4 голосов
/ 25 января 2012
ssh user@host.com "ls -l" >output

Вы можете даже сделать что-то вроде:

ssh user@host.com "cat foo.tar" | tar xvf --

Чтобы упростить задачу, сгенерируйте пару паб / закрытый ключ, используя ssh-keygen.Скопируйте ключ * .pub на удаленный хост в ~ / .ssh / authorized_keys, убедитесь, что это chmod'd 600

Тогда вы можете сделать

ssh -i ~ / .ssh / yourkeyuser@host.com ... и т. д.

И он также не будет запрашивать пароль.(Если ваша пара ключей не имеет пароля) ..

0 голосов
/ 20 февраля 2012

Ваш сценарий не получает никаких параметров и, вероятно, выполняется слишком долго из-за этого. Кроме того, все, что выходит (в stdout), может быть передано следующей команде или перенаправлено в файл, как любая другая локальная команда. Учтите следующее:

$ cat ~/bin/ascript.sh 
echo one:$1 two:$2 three:$3

$ params="squid whale shark"
$ ssh localhost  'ascript.sh $params'
one: two: three:

$ ssh localhost  "ascript.sh $params"
one:squid two:whale three:shark
0 голосов
/ 26 января 2012

Реализовано

ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file

работает, как и ожидалось.Он только блокировался, поскольку вывод перенаправлялся (а создание сценария занимало 5-6 минут), и поэтому не отображался.Спасибо всем.

0 голосов
/ 25 января 2012

Ну, для того, чтобы ssh -n работал вообще, вам нужно настроить все так, чтобы вы могли входить в систему без пароля или фразы-пароля (поэтому вам нужен локальный закрытый ключ, доступный с ssh-agent,или без ключевой фразы, и этот открытый ключ должен находиться в соответствующем файле authorized_keys на удаленной машине).Но если это так, то то, что у вас есть, должно работать нормально (у меня это работало нормально на многих машинах).

Еще одна странная возможность, если ваш удаленный script.sh пытается записать в stdin или / dev/ tty вместо stdout / stderr.В этом случае он не будет работать с ssh -n

0 голосов
/ 25 января 2012

Вы, безусловно, делаете что-то не так.Я только что проверил, и он отлично работает.

shadyabhi@archlinux /tmp $ cat echo.sh 
#!/bin/bash
echo "Hello WOrld"$1
shadyabhi@archlinux /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo
Hello WOrldfoo
shadyabhi@archlinux /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo > out
shadyabhi@archlinux /tmp $ cat out
Hello WOrldfoo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...