Perl S SH на удаленный сервер и проверьте, существует ли файл - PullRequest
0 голосов
/ 11 марта 2020

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

На удаленном сервере он проверит наличие sample_file.txt файла, существует или нет, если ДА, то он должен создать файл create_user_file.txt в home пути с определенным набором данных.

Дело здесь в том, что я могу выполнить s sh на удаленной машине, хотя ниже сценарий, но не могу проверить файлы, так как я понятия не имею как мы можем открыть удаленный сеанс и выполнить все операции.

Ниже мой код:

#!/usr/bin/perl 

use Net::OpenSSH;

.
.
.

foreach my $ip( @list_of_ips){ 
    print "Connecting to $ip...\n";
    my $ssh = OpenSSH_Connection( $ip, $user, $passwd );
    print "Connected!\n";

    $dir = "/remote/server/home/path/";
    $file = $dir."sample_file.txt";

    if (-e $file){ #if sample_file.txt exists then create user file
        open(my $fh, '>', $dir."create_user_file.txt") || die "Couldn't open file $!";;
        print $fh "ID=123&PW=Passw0rd";
        close $fh;
    }

    last if($ssh); #if connection is success no need to login into another server
    $ssh->close();
}

sub OpenSSH_Connection {
    my ( $host, $user, $passwd ) = @_;

    my $ssh = Net::OpenSSH->new("$user:$passwd\@$host");
    $ssh->error and die "Couldn't establish SSH connection: ". $ssh->error;

    return $ssh;
}

Здесь, в коде, ниже часть кода должна выполняться на удаленном сервере. Но он проверял файл, из которого я выполняю этот скрипт.

if (-e $file){ #if sample_file.txt exists then create user file
        open(my $fh, '>', $dir."create_user_file.txt") || die "Couldn't open file $!";;
        print $fh "ID=123&PW=Passw0rd";
        close $fh;
}

Как сохранить открытый сеанс сервера и выполнить приведенный выше код, или у нас есть какой-либо модуль Perl, который мог бы выполнять такие операции с локального сервера. ТИА.

1 Ответ

1 голос
/ 12 марта 2020

Ваше предположение, что Net::SSH сделает удаленные ресурсы доступными локально, неверно.

S SH создает зашифрованный канал для удаленной системы и переводит вас либо в оболочку, либо запускает удаленную команду (например, perl / сценарий оболочки), или позволяет копировать / извлекать файл.

Вы можете открыть канал S SH в удаленной оболочке и запускать команды, как на локальном компьютере, но если вы хотите проверить, существует ли файл в удаленной системе затем вы должны сообщить об этом через удаленную оболочку или скрипт perl.

Вероятно, вам нужно получить S SH FS , что может сделать удаленные файлы доступными локально.

Я должен отметить, что у пользователей в локальной и удаленной системе могут быть разные id на системном уровне, и это может быть не то, что вам нужно (манипулировать файлами другого пользователя). Этот подход может работать хорошо, если ваш локальный и удаленный id совпадает и принадлежит вам.

Я думаю, что наиболее простым способом было бы написать скрипт perl в удаленной системе и передать ему некоторые аргументы. Сценарий в удаленной системе выполнит оставшуюся часть работы.

В такой ситуации вы можете использовать Net::SSH2, чтобы установить sh соединение с удаленной оболочкой, а затем запустить удаленный perl сценарий с параметрами.

Чтобы получить лучшее представление о том, как это работает, не создавая длинных постов, я отсылаю вас к PerlMonks Net :: SSH2 демо .

Другие более трудный путь будет писать достаточно perl кода для установления sh соединения с удаленной системой по протоколу SSH2 к удаленному perl сценарию с возможностью «переводить» ваши локальные команды

$chan->command($argument)

в удаленные perl кодовые блоки для выполнения конкретной задачи.

Net :: SSH2

...