读取一行并逐行处理的shell脚本

gj3fmq9x  于 2022-11-16  发布在  Shell
关注(0)|答案(2)|浏览(171)

我有下面的文件与fqdn的服务器和用户的服务器在同一行. cat servers.txt

server1 user1 \n
server2 user2 \n
server3 user3 \n

我正在写一个shell脚本,我可以一次使用一个服务器来执行ssh,并在那里执行一些命令,然后移动到下一个服务器。例如,ssh到server1,sudo到user1,然后做这些事情,然后移动到server2。所以我写了下面,并试图调整,但没有找到解决办法。它不工作。请帮助。

ROOT_PATH=/home
SERVERS_FILE=servers.txt

while IFS= read -r line; do
        server=`cut -d' ' -f1 $line`
        user=`cut -d' ' -f2 $line`
        echo $server ::: $user
        echo "grep -rw lookeupword $ROOT_PATH/$user" | ssh $server "sudo -iu $user bash"
done <<< "$SERVERS_FILE"
xwmevbvl

xwmevbvl1#

这样就行了

#!/usr/bin/env bash
ROOT_PATH=/home
SERVERS_FILE=servers.txt

while IFS= read -r line; do
        server=$(echo -n ${line} | awk '{print $1}')
        user=$(echo -n ${line} | awk '{print $2}')
        echo $server ::: $user
        #echo "grep -rw lookeupword $ROOT_PATH/$user" | ssh $server "sudo -iu $user bash"
done < "$SERVERS_FILE"
gfttwv5a

gfttwv5a2#

如果你不介意使用一个一个班轮这里是一个简单的

首先创建.ssh/config文件,并为每个Host设置配置。下面是我的(部分)

Host docker
    HostName X.X.X.X
    port XXXX
    user root

Host nginx
    HostName X.X.X.X
    port XXXX
    user root

Host dw
    HostName X.X.X.X
    port XXXX
    user root

所以ssh(ing)到dockernginxdw没有密码是可能的(使用公钥/私钥)。

第二个循环遍历您拥有或想要运行命令的Host

xargs -I xxx ssh xxx ip -br a < hosts

下面是一个简单屏幕截图:

相关问题