2016-07-26 6 views
0

Использование команды heredoc для выполнения многострочных команд на удаленной машине. Попытка получить идентификатор процесса сервера, чтобы убить этот сервер, расположенный на удаленной машинеВыполнение команды ssh и execute

#!/bin/bash 

HOST_IP="10.180.5.23" 
read -p "For HOST RESTART press 1" num 
if [ "$num" == "1" ] 
then 
ssh -t -t $HOST_IP << 'EOSSH' 
line=$(pgrep -f host_server1) 
echo $line 
arr=($line) 
sudo kill -9 "${arr[1]}" 
EOSSH 
fi 

Ошибка: убить: (15015) - Операция не допускается

+1

Назначение значения массиву, а затем выбор первого элемента массива - бесполезная утечка. Просто 'kill '$ line" '. Вы, вероятно, не должны использовать 'kill -9'] (http://www.iki.fi/era/unix/award.html#kill). – tripleee

ответ

1

Там Heredoc работает нормально, но Sudo ожидает вас типа в пароле и нет терминала, подключенного к ssh, выполняющего команды на сервере. У вас два варианта, ни полностью безопасный:

  1. Разрешить пользователь на сервере в Суд без пароля
  2. Поместите строки из Heredoc в скрипт на сервере и сделать его setui (липким), так что он выполняется как root.

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

+0

Я вошел в систему как ssh username @ HOST_IP, и он работал нормально –

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