如何将文件从多个服务器复制到本地系统?

如何将文件从多个服务器复制到本地系统?

我们在 app00、app01 等服务器上部署了多个应用程序。我需要将所有这些服务器中的单个日志文件复制到我的本地 Mac 上,以便我可以执行一些 grep 和剪切。

我使用 csshX 查看此文件,但找不到 scp 的等效程序。我主要想要两件事:

  1. 能够连接到 n 个此类服务器并复制文件
  2. 可以通过在日志文件中添加服务器主机名前缀来避免本地命名冲突

我该怎么做呢?

答案1

这对于一个小脚本来说是微不足道的。例如:

for server in app0 app1 app4 app5 appN; do
    scp user@$server:/path/to/log/file /local/path/to/"$server"_file
done

上面将从每个服务器顺序复制文件并命名SERVERNAME_file。因此,文件将app0app0_file等。显然,您可以将名称更改为您想要的任何名称。

答案2

使用GNU并行:

parallel -j0 scp {}:/remote_path file_from_{} ::: host1 host2 host3 # and so on

与使用 的解决方案不同for,这将并行运行所有下载

答案3

remote_path="/path/to/file"
local_target_dir="/path/to/dir"
hosts=(app00 app01)
for host in "${hosts[@]}"; do
    scp "$host":"$remote_path" "$local_target_dir"/filename."$host"
done

答案4

这对我有用

#!/bin/bash
#Expect script
/usr/bin/expect -<<EOD 

set SERVERS {1 2 3 .. N}

foreach SERVER \$SERVERS {
    spawn scp user@\$SERVER:remote local/"\$SERVER"RESWeb.log
    expect {
      -re ".*es.*o.*" {
        exp_send "yes\r"
        exp_continue
      }
      -re ".*sword.*" {
        exp_send "pswrd\r"
      }
    }
    expect eof 
}
EOD

echo "completed"

相关内容