通过 ssh 将目录从多个远程服务器复制到本地主机

通过 ssh 将目录从多个远程服务器复制到本地主机

我正在尝试通过 bash 脚本从多个 Linux 主机获取目录到本地主机。但该hostname命令显示本地主机而不是远程主机的输出。所有服务器上的目录结构均为:/home/user/HOSTNAME-BCKP。

#!/bin/bash
for i in $(cat hosts);
do
scp -r $i:/home/user/`hostname`-BCKP/home/user/ALL-BCKPs/;
done

答案1

如果您希望hostname- 命令显示偏僻的hostname,您需要在远程主机上运行它。

您可以将它们读入关联数组并循环遍历:

#!/bin/bash -

declare -A myhosts
for item in $(cat hosts); do
  myhosts[$item]="$(ssh $item 'hostname')"
done

for key in "{!myhosts[@]}" ; do
  scp -r $key:/home/user/${myhosts[$key]}-BCKP /home/user/ALL-BCKPs/
done

但如果您想多次执行此操作,请考虑创建一个每行包含一对主机和主机名的文件。

您可以在 while 循环中读取它:

while read -r myhost myhostname; do
  # do something with $myhost and $myhostname
done < yourfile

相关内容