Назад | Перейти на главную страницу

Скрипт для передачи файла по SSH

Я хочу передать определенные типы файлов из каталога на сервере. Итак, вот сцена:

Структура каталогов

компании / 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. Вместо этого вы должны использовать ключи.