Как скопировать файл с нескольких серверов в локальную систему?

У нас есть несколько приложений для развертывания на таких серверах, как app00, app01 и т. Д. Мне нужно скопировать один файл журнала со всех этих серверов на мой локальный mac, чтобы я мог выполнять некоторые grepping и cut.

Я использовал csshX для просмотра этого файла, но я не могу найти эквивалент для scp. Я в основном хочу две вещи:

  1. Возможность подключения к n номерам таких серверов и копирования файла
  2. Избегайте конфликтов имен локально, возможно, путем префикса файла журнала с именем сервера

Как мне это сделать?

  • scp ssh: подключиться к хосту 10.0.0.109 порт 22: нет маршрута для приема потерянного соединения
  • почему rsync не выполняет дельта-перенос
  • Ограничение размера передачи для SCP, SFTP, RSYNC?
  • Короткий путь к scp с использованием одного и того же файла / источника в исходном и целевом
  • Передача файлов через хост-хост
  • scp изменение разрешений в каталоге / tmp
  • Скопировать каталог с помощью SCP
  • Передача файлов с помощью SSH и переключателя
  • 5 Solutions collect form web for “Как скопировать файл с нескольких серверов в локальную систему?”

    Это мелочи, связанные с небольшим сценарием. Например:

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

    Вышеуказанное копирует файл с каждого из серверов последовательно и называет его SERVERNAME_file . Таким образом, файл из app0 будет app0_file и т. Д. Вы можете, очевидно, изменить имена на все, что захотите.

    Используйте GNU parallel :

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

    В отличие от решений, для которых используется for , это будет запускать все загрузки параллельно

     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 

    Если вы можете использовать python, есть интересный модуль, который упрощает задачи машинного администрирования ish, называемые fabric: http://docs.fabfile.org/en/latest/tutorial.html

    Я хотел использовать его, но не обошел его

    Это сработало для меня

     #!/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" 
    Linux и Unix - лучшая ОС в мире.