Perl - обработка файлов - PullRequest
       29

Perl - обработка файлов

3 голосов
/ 29 июня 2010

У меня есть список файлов на хост-машине, скажем, в каталоге / src /. В каталоге больше подкаталогов. теперь этот каталог копируется на удаленную машину после монтирования. Теперь файлы предустановлены на удаленном компьютере в каталоге /dst.

Пример. Если бы у меня был / src / a / f1, / src / b / f2 Я буду иметь на удаленной машине / DST / A / F1, / DST / B / F2

Теперь у меня есть только информация о директории хоста, файле хоста. Используя эту информацию, как мне получить доступ к файлам на удаленной машине, используя ssh в perl. Я должен был бы перейти к / dst и читать файлы оттуда. Как мне сделать этот компакт-диск и прочитать в одной команде SSH.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 30 июня 2010

Если вы хотите сделать все это без делегирования /usr/bin/ssh, проверьте Net :: SSH2 и File :: Spec

Вам понадобится scp_get ( remote [, local ] )

Это будет выглядеть примерно так.

use File::Spec ();
use Net::SSH2 ();
my ( $vol, $dir, $file ) = File::Spec::splitpath( $path );
my @dirs = File::Spec::splitdir( $dir );

## Change the root dir
$dirs[0] = 'dst'; # new_root_dir

my $new_remote_path = File::Spec::catfile( @dirs, $file );

  ## Almost right from Net::SSH2 SYNOPSIS
  my $ssh2 = Net::SSH2->new();
  $ssh2->connect('example.com') or die $!;
  if ($ssh2->auth_keyboard('fizban')) {

      my $sftp = $ssh2->sftp();

      my $fh = $sftp->open('/etc/passwd') or die;
      print $_ while <$fh>;

      ## or $ssh2->scp_get( $new_remote_path );
  }
0 голосов
/ 30 июня 2010

Googling 'man ssh' предлагает страницу руководства по SSH. Я перешел по первой ссылке (http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1), из которой видно следующее. Интересные детали указаны.

ssh [-1246AaCfgkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec] [-D порт] [-e escape_char] [-F configfile] [-i индивидуальный_файл] [-L [bind_address:] порт: хост: хост порт] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o опция] [-p порт] [-R [bind_address:] порт: хост: хост порт] [-S ctl_path] [пользователь @] имя хоста [ команда ]

...

ssh (SSH клиент) - программа для вход в удаленную машину и для выполнение команд на пульте машина. Предназначен для замены rlogin и rsh, и обеспечить безопасность зашифрованная связь между двумя ненадежные хосты по небезопасному сеть. X11 соединения и произвольные Порты TCP / IP также могут быть перенаправлены по защищенному каналу.

SSH подключается и входит в указанное имя хоста (с необязательным пользователем название). Пользователь должен доказать его / ее идентификация с удаленной машиной с помощью один из нескольких методов в зависимости от используемая версия протокола.

Если указана команда, команда выполняется на удаленном хосте вместо оболочка входа в систему.

Итак, попробуйте ssh user@hostname ls -lR /src/, заменив 'ls -lR' любой командой, которая вам действительно нужна.

EDIT Да, и посмотрите на справочную страницу для файла идентификации - если у вас настроены ключи, вы можете использовать это, чтобы избежать ввода пароля для SSH в командной строке. И убедитесь, что весь путь к файлу идентификации имеет строгие разрешения, чтобы никто другой не мог его прочитать / заменить / отредактировать.

...