Я хочу передать определенные типы файлов из каталога на сервере. Итак, вот сцена:
Структура каталогов
компании / compA / filedir /
компании / compB / filedir /
компании / compC / filedir /
Поэтому я хочу переместить файлы * .csv из каталогов filedir от каждой компании на другой сервер. Я хочу использовать ssh для передачи файлов. Кто-нибудь использовал ssh для передачи файлов в сценарии оболочки? Как вы справляетесь с этой ситуацией?
Использовать scp
или rsync
.
scp
использует ssh для копирования файлов на подключенные компьютеры и с них. Пример синтаксиса копирования с локального компьютера на удаленный хост:
scp -r companies/compA/filedir username@remote.host.address:/some/remote/directory
Вам нужно будет использовать общедоступные / закрытые ключи, чтобы упростить вход в систему, если вы еще этого не сделали для ssh
.
rsync
может использовать ssh для подключения к другому серверу. Пример синтаксиса будет следующим:
rsync -avz -e ssh remoteuser@remotehost:/remote/dir /companies/compA/filedir
Также потребуются открытые / закрытые ключи.
Вы действительно захотите использовать scp, который использует SSH. Если вы хотите использовать вместо этого rsync, вы можете использовать -e ssh
аргумент.
Что касается сценария, вы, вероятно, создадите либо 1) цикл for, который выполняет итерацию по массиву, который содержит список всех местоположений и запускает соответствующую команду scp / rsync, ИЛИ 2) вы можете использовать оператор find, который проходит и выполняет каждое scp / rsync за вас.
Пример команды find будет выглядеть примерно так (непроверено):
find /dir/companies/*/filedir/ -type f -name \*.csv -exec scp {} username@otherserver.tld \;
Я предлагаю, чтобы, если вы используете SSH для любого типа передачи, вы установили какую-то аутентификацию с открытым ключом, чтобы вам не предлагалось ввести пароль.
При необходимости я могу более подробно остановиться, просто пытаясь помочь вам начать и указать правильное направление.
Вы бы не использовали программу ssh - вы должны использовать scp или sftp. Но, сказав, что лучшим решением было бы запустить rsync поверх ssh, чтобы избежать копирования файлов, которые вы уже получили, но это только вариант, если rsync доступен (или может быть установлен в удаленной системе).
Чтобы не вводить пароль, вам нужно сначала настроить пару ключей, а затем просто:
#!/bin/bash
scp somuser@server:/companies/compA/filedir/*.csv /local/compa/filedir
scp somuser@server:/companies/compB/filedir/*.csv /local/compb/filedir
scp somuser@server:/companies/compC/filedir/*.csv /local/compC/filedir
scp companies / comp? / filedir / *. csv 192.168.1.200:/remotedir - это 192.168.1.200 IP удаленного сервера.
Если вам нужен пользователь и вы прошли, вы должны проверить руководство scp (man scp), но я считаю, что вы не можете указать их в команде scp. Вместо этого вы должны использовать ключи.