簡體   English   中英

如何在 200 台服務器上運行腳本並在堡壘實例終端中打印輸出? 我的 bash 腳本掛在遠程服務器的 ssh 上

[英]How to run script on 200 servers and print output in bastion instance terminal? My bash script hangs on ssh to remote server

我們的服務器在 AWS (ec2) 上,我必須在 200 台服務器上運行相同的命令集,並且需要在我的終端上輸出。 我有可以訪問所有 200 台服務器的堡壘實例。 這個問題最初是在 2015 年提出的。我有一個腳本在機架空間上運行良好,但在 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"

因為這就是你的腳本所做的。 它運行sudo -i 'bash -s'而不帶參數ssh ,這會導致遠程 Bash 啟動交互式 shell,並等待您的輸入。 您正在指示ssh$2讀取輸入,但它不能那樣工作。

exitEOT是技術上的語法錯誤,是的。 看來您希望ssh命令以某種方式讀取它正在運行的腳本的以下幾行,但它也不能那樣工作。

您似乎正在尋找類似在遠程 Linux 主機上執行本地腳本的內容

這不是我討論過的重復問題或問題

我不想使用 scp,我想避免 scp 將文件復制到遠程服務器然后執行,我使用 bash 腳本直接從我的服務器執行命令到遠程服務器,通過這種方式,我在 100 個上運行命令服務器,當時沒有合適的工具可以做到這一點。 現在 AWS 為您提供 SSM 等。

回答:

The reason my script hangs while running a script was, I was using sudo -i and 
then 'bash -s', so what I need to do is, I just need to remove sudo -i 'bash -s' 
and add sudo in front of all commands that I am try to pass using file $2 from 
outside the file using another file.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM