最初的想法是将脚本复制到每个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