0

我在同一行中有服务器的 fqdn 和该服务器的用户的以下文件。猫服务器.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"
4

2 回答 2

0

这将起作用。

#!/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"
于 2021-03-04T05:51:33.430 回答
0

如果您不介意使用一个衬垫,这里是一个简单的衬垫

首先为您拥有的每个文件创建.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

这是一个简单的屏幕截图:

在此处输入图像描述

于 2021-03-04T06:00:56.080 回答