【发布时间】:2016-09-08 16:28:30
【问题描述】:
最初的想法是复制一个脚本到每个 IP 地址,这将在每台机器上执行 yum-install 一些 RPM 和一些配置步骤。由于 yum-install 大约需要 20 分钟,因此希望在每台机器上同时进行安装,然后等待所有生成的进程完成后再继续。
#!/bin/bash
PEM=$1
IPS=$2
for IP in IPS; do
scp -i $PEM /tmp/A.sh ec2-user@IP:/tmp
ssh -i $PEM ec2-user@$IP chmod 777 /tmp/A.sh
done
for IP in IPS; do
ssh -t -i $PEM ec2-user@$IP sudo /tmp/A.sh &
done
wait
echo "IPS have been configured."
exit 0
在后台对三个 IP 地址执行远程 sudo execute 命令会产生三个错误消息。显然,我的逻辑有缺陷。
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
【问题讨论】:
-
谢谢。但是,问题不在于 sudo 命令的执行,而是在远程系统的后台执行命令。如果没有“&”,脚本可以正常工作,但命令执行是连续的。我正在尝试分叉一个进程,以便在多台远程机器上同时执行。
-
所以让我来做对吧:你有 N 台机器,你想通过 ssh 同时运行一个命令,你想等待它们全部终止?
标签: bash ssh remote-access