bash脚本SSH到服务器然后运行命令

时间:2018-12-17 15:30:05

标签: bash loops ssh command

好吧,我看到了其他问题,但我认为我的问题不适用,所以我在这里……我是一名刚接触bash脚本的程序员 我想SSH到我的亚马逊实例,然后启动自己的.sh文件 伪:

{
ssh -i ...
cd /../
./blah.sh
profit!
}

我有多个(5+)实例保存在txt文件中,我想循环播放,因此最终每个实例都会有自己的ssh对话框。 文本文件具有完整的命令

"ssh -i blah.pem ubuntu@ec2-blah.amazonaws.com"

更新:

#!/bin/bash
while read LINE
    do
[ ! -f /tmp/$(basename $0) ] && cp $0 /tmp/ && konsole -e $0 && exit
rm /tmp/$(basename $0) # open separate window for code to run
    $LINE << EOF # read line (ssh cmd)
    cd /st/task/ #commands during ssh
    ./start.sh #need something to let this run and go back to beginning of loop 
EOF
done < pdns.txt

到目前为止,在您的帮助下,我已经可以工作了……所以我的新问题是,在执行第一个ssh操作后,它不会循环到下一个ssh操作,因为start.sh文件没有结束(通过设计)。需要帮助!

1 个答案:

答案 0 :(得分:0)

您可能正在寻找类似的东西

while read -r ignore stuff pem host; do
    ssh -i "$pem" "${host%\"}" 'cd .. && ./blah.sh' </dev/null
done <input.txt

如果您可以从文件input.txt中删除引号和其他垃圾,使其仅包含主机名和PEM,甚至可以避免将此信息存储在单独的文件中,则可以简化为

while read -r host pem; do
    ssh -i "$pem" "$host" 'cd .. && ./blah.sh' </dev/null
done <<\____HERE
    server1.example.com  server1.pem
    server2.example.net  second.pem
    third.example.org    number3.pem
____HERE

一个常见的错误来源是让ssh吞噬您打算供while read -r读取的输入;重定向</dev/null阻止了这种情况的发生。

顺便说一句,许多脚本不需要在它们存储的目录中运行。也许简单地../blah.sh也可以正常工作。同样,脚本文件应该相切地不具有.sh扩展名。