linux - 如何在 200 台服务器上运行脚本并在堡垒实例终端中打印输出?我的 bash 脚本卡在 ssh 到远程服务器上

标签 linux bash amazon-web-services shell amazon-ec2

我们的服务器在 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 读取输入,但它不会那样工作。

exitEOT 是技术上的语法错误,是的。您似乎希望 ssh 命令以某种方式读取正在运行的脚本的以下行,但它也不会那样工作。

您似乎在寻找类似 Execute local script on remote Linux host 的内容

关于linux - 如何在 200 台服务器上运行脚本并在堡垒实例终端中打印输出?我的 bash 脚本卡在 ssh 到远程服务器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29022139/

相关文章:

bash - 子外壳和并行处理

bash - bash 中数字的表示和 bash 中十六进制数的 printf

linux - 运行影响父 shell 的 bash 命令

linux - vncconfig 无法在启动时自动工作

linux - 可以从两个主机名访问 Ubuntu 服务器

amazon-web-services - 来自谷歌或亚马逊的书籍概要api?

amazon-web-services - 为什么我的单部分 MP3 文件由于 InvalidPart 多部分文件上传错误而无法上传到 AWS S3?

linux - 在 linux 中连接非阻塞套接字的正确方法是什么

bash - 如何使 .bashrc 别名在 vim shell 命令中可用? (:! ...)

angular - 无法通过 AWS EC2 实例上的公共(public) DNS 访问正在运行的 docker 容器