2014-10-09 3 views
0

мне нужноPerl SSH затем прочитать файл на удаленном сервере

  1. подключиться к удаленному серверу; затем
  2. выполните некоторые действия, например, открыть и прочитать содержимое файла.

На шаге 1:

my $server = "remoteservername.company.com"; 
my $ssh = Net::SSH::Perl->new("$server", debug => 1, protocol => 2, StrictHostKeyChecking => "no") or die "Error connecting server $server"; 

дает Сообщ на клемме

Connection established.

так что я полагаю, я SSH подключен к удаленному серверу, с помощью кода.

Для шага 2 как открыть и прочитать файл на удаленном сервере с помощью кода с локального сервера? это лучшее, что я могу сделать до сих пор:

use strict; 
use warnings; 
use diagnostics; 
use warnings::register; 
use Net::SSH::Perl; 
use Net::SSH::Expect; 
use Math::BigInt lib => "Calc,GMP,Pari"; 

my $server = "server09"; 
my $ssh = Net::SSH::Perl->new("$server", debug => 1, protocol => 2, StrictHostKeyChecking => "no") or die "Error connecting server $server"; 

#open(FILE, "/home/myid/f09.txt") || print("Unable to open test.o\n"); #works, on local, opens file[does not fail]. 

#open(FILE, "server09://home/myid/f09.txt") || print("Unable to open test.o\n"); #---> error: "Unable to open test.o" 

my @remote_text = `this text is put into array.`; 
my $remote_text = join ('',@remote_text); 
open (FILE,'>/home/myid/f09.txt'); 
print FILE "$remote_text"; 
close (FILE); 

exit(0); 

пока он ничего не добавляет к существующему файлу f09.txt; также, если я удалю файл, open не создает его. нет ошибок, но это не похоже на удаленный файл.

просто простое объяснение ssh, тогда чтение из удаленного файла было бы полезно. другие примеры, которые я вижу, не разрезают его. конечно, может быть, я, долгий день, должен немного отойти от него. ваше время очень ценится!

+0

Если бы я был вами, я бы написал скрипт Perl, чтобы сделать все локально и выполнить его поверх ssh. – reinierpost

ответ

0

Вы по существу пытаетесь изменить файл, который существует на другой машине через SSH. Функции операций с файлами не могут справиться с этим.

Возможно ли загрузить файл с другого сервера, обновить его локально и повторно загрузить файл?

Вы также можете поэкспериментировать с командой SSH:

my @remote_text = ('this text is put into array.'); 
my $remote_text = join ('',@remote_text); 

my @args = ("ssh server09", "echo '$remote_text' > /home/myid/f09.txt"); 
system(@args) == 0 or die "system @args failed: $?" 
+0

вы знаете, я видел еще один комментарий к этому вопросу, но думаю: «Почему черт не?» /, Но если это так, то это то, что есть. конечная цель - прочитать файл журнала, выполнить «kill -0» на нем, если T [rue], то запущена определенная служба, если нет, то служба остановилась и ее необходимо перезапустить. SO,? Скачать файл локально, сделать «кошку» на нем, чтобы получить pid, сделать kill -0 на нем и т. Д.?? хорошо, если это будет выполнено, тогда я займусь этим. *! thx! * за ваш ответ! [первый ! in *! thx! * не является, но скорее ударом] немного юмора кода там;) – dcparham

+0

gm - Кстати, я только хочу прочитать файл, возможно, сделать операцию только для чтения на нем. * конечно * [!] мы можем подключиться к удаленному серверу, затем открыть и прочитать файл? просто хотел подчеркнуть, что в случае, если это достаточно тонко, чтобы не заметить. пожалуйста, ответьте, если у вас больше мыслей. очень признателен! – dcparham

+0

этот код привел меня к следующему шагу: [4 пробела без кода]: [CODE] use strict; \t предупреждения использования; \t использование диагностика; \t Предупреждения: регистр; \t использование Net :: SSH :: Perl; \t Использование Net :: SSH :: Expect; \t использование Math :: BigInt lib => "Calc, GMP, Pari"; \t my $ remote_filename = '/ var/log/systemlog'; \t my $ remote_host = "server.team.domain.com"; \t my $ cmd = "ssh $ remote_host tail -f $ remote_filename |"; \t \t открыть мой $ remote_tail, $ cmd или умереть «ужасная смерть!»; \t \t в то время как (<$ remote_tail>) { \t \t \t печать "Пульт дистанционного управления: $ _"; \t \t} \t выход (0); [/ CODE] – dcparham

0

Для проведения интересного подключении по SSH к другой машине, вы можете попробовать IPC::PerlSSH. Из одного из его примеров:

use IPC::PerlSSH; 

my $ips = IPC::PerlSSH->new(Host => "over.there"); 

$ips->use_library("FS", qw(mkdir chmod writefile)); 

$ips->call("mkdir", "/tmp/testing"); 
$ips->call("chmod", 0600, "/tmp/testing"); 

$ips->call("writefile", "/tmp/testing/secret", <<EOF); 
Some secret contents of my file here 
EOF 
Смежные вопросы