Shell 使用 scp 从多个服务器提取数据

Shell 使用 scp 从多个服务器提取数据

我是 shell 世界的新手,正在编写一个简单的脚本来从 300 多个服务器中提取文件。想知道我是否像下面这样写,那么它会一次性登录到所有 300 台服务器并提取文件,或者它会逐一进行。另外,我可以为一个用户提供无密码登录,我可以在 $username 中提及该用户,或者我需要为此创建其他脚本。

#!/bin/bash
cd /backup
for server in $(cat server.txt)
do
scp -r  $username@$server:/tmp/backup/*.txt* .
done

答案1

这么写的话,就一一去吧。

看一下parallel(可能需要安装软件包)并行执行。另外,不要一次执行所有 300 个操作,限制并发执行的数量(否则整体会变慢)。

您可以无密码登录;您需要创建一个 ssh 密钥对,将私钥放入您执行操作的机器中scp,并将公钥放入~/.ssh/authorized_keys您复制的所有 300 台机器中。如果密钥在正确的位置,您无需更改脚本。

答案2

就像 dirkt 所说,这将按顺序执行每个命令——即,在第一个命令完成之前,它不会启动下一个副本。

如果您希望脚本在合理的时间内运行,您可以将字符附加&到行或代码块的末尾(放在大括号中)以在后台运行命令并立即启动下一个命令,如下所示:

#!/bin/bash

for server in $(cat server.txt); do
    scp -r  $username@$server:/tmp/backup/*.txt* /backup/ &
done

相关内容