最初的想法是將腳本複製到每個IP地址,然後在每臺計算機上執行yum-install一些RPM和一些配置步驟。由於yum-install需要大約20分鐘,所以希望在每臺機器上同時安裝,然後等待所有產生的進程完成後再繼續。在遠程計算機上執行同步腳本,並等待處理完成
#!/bin/bash
PEM=$1
IPS=$2
for IP in IPS; do
scp -i $PEM /tmp/A.sh [email protected]:/tmp
ssh -i $PEM [email protected]$IP chmod 777 /tmp/A.sh
done
for IP in IPS; do
ssh -t -i $PEM [email protected]$IP sudo /tmp/A.sh &
done
wait
echo "IPS have been configured."
exit 0
在後臺對三個IP地址執行遠程sudo執行命令會產生三條錯誤消息。顯然,我的邏輯存在缺陷。
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
所有機器都的CentOS 6.5
請參閱https://unix.stackexchange.com/questions/122616/why-do-i-need-a-tty-to-run-sudo-if-i-can-sudo-without-a-password – andlrc
謝謝。但是,問題不在於執行sudo命令,而在於在遠程系統上執行後臺命令。如果沒有「&」,腳本就可以正常工作,但命令執行是順序的。我試圖分叉一個進程,以便在多個遠程機器上同時執行。 – user2569618
所以,讓我明白這一點:你有N臺機器,你想通過ssh同時運行一個命令,並且你想等所有的終端都結束? – louigi600