Соединение Perl SSH для выполнения telnet
Я попытался получить доступ к маршрутизатору через центральный сервер администратора в качестве сервера "ssh hop"
#!/usr/bin/perl -X
use strict;
use Net::OpenSSH;
use Net::Telnet;
my $lhost = "linuxserver";
my $luser = "linuxuser";
my $lpass = "linuxpassword";
my $chost = "routername";
my $cpass = "Routerpassword";
my $prompt = '/(?:Password: |[>])/m';
my @commands = ("show usersr");
my $ssh = Net::OpenSSH->new($lhost,
'user' => $luser,
'password' => $lpass,
'master_opts' => [ '-t' ],
#'async' => 1 # if enabled then password cannot be set here
);
my ($pty, $err, $pid) = $ssh->open2pty("telnet $chost");
my $t = new Net::Telnet(
-telnetmode => 0,
-fhopen => $pty,
-prompt => $prompt,
-cmd_remove_mode => 1,
-output_record_separator => "r",
#-dump_log => "debug.log",
);
my $end = 0;
while (!$end) {
my ($pre, $post) = $t->waitfor($prompt);
if ($post =~ /Password: /m) {
# send password
$t->print("$cpass");
}
elsif ($post =~ /[>#]/ && @commands) {
my $cmd = shift(@commands);
if ($cmd !~ /[rn]/) {
$t->print($cmd);
}
else {
print $t->cmd($cmd);
}
}
else {
$end = 1;
$t->cmd("exit");
}
}
#close $pty;
$t->close();
К сожалению, я всегда получаю следующую ошибку: ошибка чтения: ошибка ввода-вывода при test.pl строка 71
Может ли кто-нибудь помочь мне, пожалуйста, или есть лучшее решение только для проверки, возможно ли соединение telnet через сервер "hop" или нет?
Соединение выглядит следующим образом: рабочая станция -- ssh - > сервер --telnet - > маршрутизатор
Заранее благодарю.
2 ответа:
Я думаю, что лучший вариант-сделать SSH-туннель к вашему серверу администратора и использовать его для телетайпа к маршрутизатору.
ПолучениеNet::Telnet для работы надNet::OpenSSH иногда не так просто, как должно быть, и требуется некоторое экспериментирование, чтобы получить правильную комбинацию флагов и вызовов, которые заставляют его работать.
Например, вместо телетайпа к целевому хосту используйте netcat для открытия необработанного соединения (или Net:: OpenSSH поддержка пересылки TCP, если туннели разрешены на прокси).Ожидать + Net:: OpenSSH может быть лучшим вариантом.