Я пытаюсь написать сценарий 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;
Заранее спасибо.
Вы должны рассмотреть возможность использования [Net :: OpenSSH] (https://metacpan.org/pod/Net::OpenSSH) вместо Net :: SSH :: Perl. В его документации содержится информация о том, как использовать его с 'sudo'. – salva
Я думаю, что сначала попробовал, но я проверю его еще раз, когда я приступаю к работе сегодня. Спасибо. – th3us3r
Я пробовал этот модуль, но этот модуль PERL не установлен, и у меня нет прав на его установку. Есть ли другой способ выполнить эту задачу с помощью PERL? – th3us3r