2014-11-02 8 views
2

Я пытаюсь написать сценарий PERL для ssh на удаленную машину и запустить некоторые tcptraceroutes. Мне удалось обработать часть SSH. Однако команда tcptraceroute требует sudo, и вот где я столкнулся с проблемой. Пример:PERL ssh script tty issue

my (@traces, $stderr, $exit) = $sshCali->cmd(tty => 1, 
"sudo tcptraceroute $endpoint", interactive => 1, debug => 1); 

Когда я использую TTY => 1 систему подачи жалоб с этой ошибкой: "не TTY" Когда я не использую TTY => 1, то я получаю это: «Суд: извините, вы должен иметь tty для запуска sudo " Любая помощь будет принята с благодарностью. Вот мой код:

#!/usr/bin/perl 
use strict; 
use warnings; 
use Net::SSH::Perl; 

#vars 
my $endpoint = 172.31.100.1; 
my @traces; 
my $sshCali; 
my $hostCali = 'remotemachine'; 
my $cmd = 'sudo traceroute'; 

warn "Starting SSH Services:...\n"; 

$sshCali = Net::SSH::Perl->new($hostCali, interactive => 1, debug => 0) or die "Couldnt establish connection!"; 

$sshCali -> login("user"); # for non-interactive mode; 

print "here\n"; 

my (@traces, $stderr, $exit) = $sshCali->cmd("sudo tcptraceroute $endpoint", interactive => 1, debug => 1); 

#my (@traces, $stderr, $exit) = $sshCali->cmd(tty => 1,"$cmd $endpoint", interactive => 1, debug => 1); 

print STDERR "STDERR: $stderr\n" if $stderr; 
print "command exit w/ code: $exit\n"; 

$sshCali -> cmd("exit"); 


print "NOW ..... Printing the array: TRACES\n"; 
print @traces; 

Заранее спасибо.

+0

Вы должны рассмотреть возможность использования [Net :: OpenSSH] (https://metacpan.org/pod/Net::OpenSSH) вместо Net :: SSH :: Perl. В его документации содержится информация о том, как использовать его с 'sudo'. – salva

+0

Я думаю, что сначала попробовал, но я проверю его еще раз, когда я приступаю к работе сегодня. Спасибо. – th3us3r

+0

Я пробовал этот модуль, но этот модуль PERL не установлен, и у меня нет прав на его установку. Есть ли другой способ выполнить эту задачу с помощью PERL? – th3us3r

ответ

 Смежные вопросы

  • Нет связанных вопросов^_^