我们的服务器在 AWS (ec2) 上,我必须在 200 台服务器上运行相同的命令集,并且需要在我的终端上输出。我有堡垒实例,可以访问所有 200 台服务器。这个问题最初是在 2015 年提出的。 我有一个在 rackspace 上运行良好但在 AWS 上的脚本,默认用户是 ec2-user 所以我需要根据 ec2-user 调整脚本或在 ssh 期间切换到 root 用户。
是否有任何语法问题或遗漏了什么? 我的脚本名称是 runOnAppServer.sh,然后是具有所有 ips 的文件,然后是提到的命令文件 --> runOnAppServer.sh server_ip scriptFile
脚本在下面提到
#!/bin/bash
# The private key used to identify this machine
IDENTITY_KEY=/home/sshKey.pem
syntax()
{
echo "Syntax: runOnAppServer.sh server_ip scriptFile]"
echo "For example: ./runOnAppServer.sh server_ip scriptFile"
exit 1
}
if [ $# -ne 2 ]
then
echo not enough arguments
syntax
fi
echo "Running script $2 on $1"
ssh -t -t -i $IDENTITY_KEY ec2-user@$1 sudo -i 'bash -s' < $2
exit
EOT
echo "Done"
最佳答案
因为这就是您的脚本所做的。它在 ssh
上运行 sudo -i 'bash -s'
时没有任何参数,这会导致远程 Bash 启动交互式 shell,并等待您的输入。您正在指示 ssh
从 $2
读取输入,但它不会那样工作。
exit
和 EOT
是技术上的语法错误,是的。您似乎希望 ssh
命令以某种方式读取正在运行的脚本的以下行,但它也不会那样工作。
您似乎在寻找类似 Execute local script on remote Linux host 的内容
关于linux - 如何在 200 台服务器上运行脚本并在堡垒实例终端中打印输出?我的 bash 脚本卡在 ssh 到远程服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022139/