简单的 ssh 循环,无需运行额外命令

简单的 ssh 循环,无需运行额外命令

我到处寻找一个简单的脚本来循环一系列服务器。我不想自动运行其他命令,但我只找到了这些。我不需要这样做。我只想让它通过 SSH 连接到服务器并允许我对其进行操作,然后当我退出时它会转到下一个服务器。我以前做过这个,但那是在旧的 debian 机器上,现在我使用的是 ubuntu

#!/bin/bash

for IP in `cat /home/bb/server.txt`
do echo $IP
ssh -p 2202 $IP
done

我尝试过修改其他人发布的脚本,例如

#!/bin/bash

servers="/home/bb/server.txt"
while IFS= read -r server
do
     echo "connecting ... $server"
     ssh -p 2202 "$server"
done < "$servers"

但这只是旋转它们并不允许我在任何服务器内工作。

编辑1:第一个循环仅回显文件位置而不是服务器,因此它不会打开文件来读取主机名。此外,它还返回“无法解析主机名 cat”,这证实它没有读取它。

编辑2:我试图避免安装新软件,因为这些服务器不赞成安装新软件。

编辑 3:至于我的最终目标,我会尽量更详细。我需要在一系列服务器上完成工作。每个服务器上的工作都不同,但它们都有需要完成的工作。使用脚本将我连接到下一个服务器比使用主机名列表(共 58 个)更方便,因为这样可能会遗漏一个。我只需要脚本将我 ssh 到一台服务器,然后当我完成后退出exitctrl+d 它 ssh 到下一台服务器

答案1

正如 @larsks 指出的那样,read 将通过获取文件描述符 0 来屏蔽终端。您可以通过对脚本进行少量更改来覆盖此功能。

#!/bin/bash
servers=/home/bb/server.txt
exec 3<"$servers"
while IFS= read -u 3 -r server
do
    echo "connecting ... $server"
    ssh -p 2022 "$server"
done

答案2

第一个循环看起来是正确的,假设所有服务器都监听端口 2202 而不是 22。

根据您的使用情况,我建议您查看tmux-cssh它允许您同时在多台服务器上工作。如果您要在所有服务器上输入相同的命令,它可能适合您的用例。

连接四台服务器时是这样的……

带有四台服务器的 tmux-cssh 屏幕截图

相关内容