Как скопировать данные из удаленной системы без использования модулей Perl ssh или FTP? - PullRequest
0 голосов
/ 28 октября 2009

Мне нужно написать Perl-скрипт для автоматического копирования данных с удаленного сервера в мою локальную систему. Структура каталогов в удаленных системах:

../log/D1/<date>.tar.gz
../log/D2/<date>.gz
../log/D3/<date>.tar.gz
../log/D4/<date>

и то же на другом сервере. Я хочу скопировать данные в локальной системе в формате ниже.

../log/S1/D1/<date>.tar.gz
../log/S1/D2/<date>.gz
../log/S1/D3/<date>.tar.gz
../log/S1/D4/<date>

и то же самое для других серверов, то есть S2, S3 и т. Д.

Кроме того, не поддерживаются ssh модули Perl на удаленном сервере, а также на локальном сервере, и у меня нет разрешения на установку каких-либо модулей Perl. Единственное, что хорошо, это то, что подключение осуществляется через ssh-ключи без пароля.

Может кто-нибудь предложить мне какой-нибудь Perl-код, чтобы это сделать?

Ответы [ 6 ]

4 голосов
/ 28 октября 2009

Я считаю, что вы можете получить доступ к команде оболочки из Perl.

Так что вы можете сделать это:

$cmd = "/usr/bin/scp <i>remotefile</i> <i>localfile</i>";
system $cmd; 

ПРИМЕЧАНИЕ: scp является secure-copy - приятель ssh.

Для этого не требуется модуль ssh-perl, но требуется поддержка ssh на обоих (что у меня есть).

Надеюсь, это поможет.

2 голосов
/ 28 октября 2009

Я начал предлагать программу командной строки scp, но, похоже, для этого есть модуль CPAN (неудивительно). Проверьте Net :: SCP .

Используя scp на своем клиенте (где вы можете установить новые модули Perl), вы можете копировать файлы без необходимости устанавливать какое-либо новое программное обеспечение в удаленной системе. Для этого просто должен быть запущен ssh-сервер, что вы и сказали.

1 голос
/ 01 ноября 2009

Звучит так, будто вы хотите rsync. Вам вообще не нужно заниматься программированием.

1 голос
/ 28 октября 2009

Возможно, вы не сможете установить что-либо в общесистемные каталоги lib, но ничто не мешает вам устанавливать модули в месте, к которому у вас есть доступ для записи. См. Как мне сохранить собственный каталог модуля / библиотеки?

Это создает не больше проблем с безопасностью, чем возможность писать сценарии в этой системе.

Итак, зайдите и установите Net :: SCP .

1 голос
/ 28 октября 2009

Из вашего запроса выше я понимаю, что у вас недостаточно прав для установки модулей Perl или внесения каких-либо изменений, требующих прав администратора. Я люблю Perl, но чтобы автоматизировать подобные вещи, вы должны использовать Bash вместо Perl. Ниже приведен пример кода, который я использую с паролем без ключей SSH.

#!/bin/bash

DATE=`date`
BASEDIR="/basedir"
cd $BASEDIR

for HOST in S1 S2 S3
do

        scp -q $HOST:$BASEDIR/D1/$DATE.tar.gz $HOST/D1/
        echo "Data copy from $HOST done"
done
exit 0

Вы можете использовать разные форматы даты, например date +%Y%m%d для текущей даты в формате ГГГГММДД. Также вы можете использовать эту ссылку для изучения различных форматов даты.

Надеюсь, это поможет.

1 голос
/ 28 октября 2009

Я бы сказал, прекрати пытаться усложнить себе жизнь и заставь систему поддерживать требуемые функции.

Попытка разработки для такой ограниченной / заблокированной платформы не будет экономически эффективной в долгосрочной перспективе - вы будете разрабатывать вещи медленнее и в ней будет больше ошибок.

Небольшое время на разработку обходится намного дороже, чем приличное размещение виртуальной машины / аппаратного обеспечения.

Найдите подходящего хоста, он определенно сэкономит деньги (поговорите об этом с вашим менеджером).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...