2013-07-11 3 views
0

Я хочу написать скрипт, который я могу использовать для grep для процесса на удаленном сервере, на каждом сервере уже есть учетная запись пользователя, которая может ssh без пароля, , так что идея этот скриптУдаленный сценарий оболочки

  • Суд в Беспарольном учетной записи пользователя
  • SSH на удаленный сервер
  • Команда запуска (п.с. -ef | Grep ProcessName)
  • дисплея выход на локальном сервере
  • закрыть соединение SSH
  • выход из беспарольного учетной записи пользователя

в минуту у меня есть:

if [ $1 = -r ] 
then 
su - useraccount 
ssh $2 "ps -ef | grep process | grep -v grep" 
exit 
else 
ps -ef | grep process | grep -v grep 
fi 

Идея здесь вы можете запустить скрипт локально, если вы не имеете - опция г так, чтобы запустить локально вы бы

script.sh processname 

или дистанционно

script.sh -r remotehost processname 

У меня есть Grep -v Grep там еще потому, что просто раздражает меня видеть мою собственную команду Grep в списке,
Я просто думаю, что это выглядит немного чище
Есть идеи?

+0

Так в чем проблема? –

+0

'su' начинает свою собственную оболочку, используйте' su - username -c 'вашу команду ssh ''. – Wrikken

+0

Спасибо, да, что сработало, я могу получить скрипт на ssh на удаленный сервер, но теперь проблема заключается в передаче локальных переменных на удаленный сервер, поэтому, если я запустил 'script.sh -r remotehost processname', имя процесса составляет $ 3 локально, не удаленно –

ответ

0

Вместо того чтобы сказать

ssh -t host command $argument ... 

говорят

ARGUMENT="-abc" 
COMMAND="'command $ARGUMENT'" 

, а затем предложить

sst -t host $COMMAND 

удаленный компьютер будет не иметь ни малейшего представления, что $ARGUMENT есть, так что не забудьте интерполировать эту строку на локальном компьютере перед отправкой. Обратите внимание, что вам нужно быть сложным с кавычками, как я уже говорил, потому что вы не можете интерполировать переменные внутри одиночных тиков ('').

редактировать:

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

ssh -t host -- ps -ef | grep process_name | grep -v grep 

Мне кажется, что это лучший способ сделать это. Тогда вам не нужно возиться с переменной интерполяцией и любопытными клещами.

редактировать 2:

Вы можете не только использовать sudo -s username ssh foo?

1

Если у вас много обработки и трубопроводов, я бы рекомендовал написание скрипта на локальном хосте, а затем вызвать его на удаленном хосте с помощью ssh.

$ cat localScript.sh локальный #!/USR/бен/ksh`

ps -ef | grep -i java | grep -v grep

$ локальный ssh [email protected] < localScript.sh

Это напечатает ожидаемый результат на локальном хосте.

0

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

ssh -l <username> remotemachine 

Итак:

ssh -l useraccount remote host ps -ef | grep process 

Сделайте Grep локально, и избежать проблем с Grep появляться на выходе, а также.

Смежные вопросы