передать сервер команд, используя perl openssh

есть 2 системы,

клиентская система, в которой я передаю команды на сервер, выполняя на сервере openssh, и мой сценарий выглядит следующим образом

#!/usr/bin/perl
use lib "/home/geek/app/usr/lib/perl5/site_perl/5.8.8";
use lib "/home/geek/app/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi";
use lib "/usr/lib/perl5/5.8.8";

use Net::OpenSSH;
my $host = '******010';
my $user = '*****';
my $pass = '*****';
my $ssh = Net::OpenSSH->new("$user:$pass\@$host");
$ssh->error and
 die "Couldn't establish SSH connection: ". $ssh->error;
my $out = $ssh->capture("/p/inway/bin/inway71 lib123 p123.0_CC default ");
#my $out = $ssh->capture("cd units; ls");
#$out = $ssh->capture("ls units/");

 print "output is $out";

а на сервере /p/inway/bin/inway71 есть скрипты:

#!/bin/sh
. $MODULESHOME/init/sh
module load lsf

exec bsub -Is -q interactive -J INWAY71_LSF -R 'type==X64LIN && osrel==50 && clearcase' /nfs/site/proj/inway/bin/inway71 ${1+"$@"}

поэтому, когда я захожу на свой сервер и запускаю этот скрипт в своем терминале, я буду перенаправлен на какой-то путь (я понятия не имею, что это такое, но я думаю, что это еще один сервер, на который я могу войти, используя этот скрипт bash), и я могу выполните остальную часть деятельности, например, cd, ls, cat и т. д. и т. д.)

но когда я запускаю это из своей клиентской системы, он передает управление терминалу и ждет моего ввода, и в моем терминале я получаю сообщение об ошибке:

stty:standard input:Invalid argument

В моем терминале я могу сделать ls или что-то еще, но не могу сделать это из сценария perl и зафиксировать результат. Как я могу решить эту проблему и получить то, что я хочу?


person geek    schedule 17.02.2016    source источник
comment
извините за мой английский :p   -  person geek    schedule 17.02.2016
comment
Всегда use strict; use warnings;!   -  person Biffen    schedule 17.02.2016
comment
Если вы не хотите, чтобы программа была интерактивной, возможно, вам не следует передавать опцию -q interactive?   -  person neuhaus    schedule 17.02.2016
comment
нет.. удаление -q интерактивно не помогло..   -  person geek    schedule 18.02.2016


Ответы (1)


Ожидается, что эта удаленная команда будет запущена в интерактивном режиме. Это не работает с командным режимом SSH. Посмотрите этот Net::OpenSSH FAQ!

Ты сможешь:

  1. найти способ передавать команды в качестве аргументов этому сценарию.
  2. перепишите его, чтобы принимать команды в качестве аргументов.
  3. поговорите с ним, используя Expect.
person salva    schedule 01.03.2016