2016-07-26 255 views
0

使用heredoc在遠程機器上執行多行命令。 試圖讓一個服務器的PID殺死該服務器位於遠程機器運行ssh並執行命令

#!/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

將值賦給數組然後獲取數組的第一個元素是完全無用的轉移。只需「殺死」$ line「'。你[也許不應該使用'kill -9'](http://www.iki.fi/era/unix/award.html#kill)。 – tripleee

回答

1

有定界符工作正常,但須藤期待您鍵入在密碼中,沒有連接到執行服務器上的命令的ssh的終端。你有兩個選擇,也不是完全安全的:

  1. 允許服務器sudo的用戶無需輸入密碼
  2. 將來自定界符行到一個腳本在服務器上,並使其setui(粘),所以它以root身份執行。

這些通常適用於以root身份運行腳本。您的另一個特定於此案例的選項是以運行服務器進程的用戶身份登錄,以便您不會從kill中獲得不允許的操作。

+0

我登錄爲 ssh username @ HOST_IP,它工作正常 –