2016-03-22 4 views
2

Мне нужно выполнить SSH с удаленной машины, в которой я вошел в систему, используя Net :: SSH :: Perl, то есть 'cmd', переданный в $ ssh-> cmd в приведенном ниже коде это еще один SSH (например, имя пользователя @ hostname). Есть ли способ передать пароль для этого второго SSH, а затем выполнить команду на этом втором удаленном компьютере. Кроме того, я не могу использовать такие инструменты, как ssh key-pair logins или sshpass. Может кто-нибудь помочь?Выполнение второго SSH в SSH в perl

use Net::SSH::Perl; 

    my $hostname = "hostname"; 
    my $username = "username"; 
    my $password = "password"; 

    my $cmd = <command to be executed on remote machine>; 

    my $ssh = Net::SSH::Perl->new("$hostname", debug=>0); 
    $ssh->login("$username","$password"); 
    my ($stdout,$stderr,$exit) = $ssh->cmd("$cmd"); 
    print $stdout; 
+0

Я помню связанный с этим вопрос. Вы действительно должны это делать, ssh в цепях? Почему бы не вернуться обратно к хосту и ssh из него еще раз? – zdim

+0

SSH на второй удаленный компьютер можно сделать только с первой удаленной машины – nebula

+0

См. Также [Цитирование в bash и perl в рекурсивной команде ssh] (http://stackoverflow.com/questions/23597777/quoting-in-bash-and-perl -in-recursive-ssh-command) –

ответ

2

Net :: SSH :: Perl серьезно ограничен. Я предлагаю вам вместо этого использовать Net::OpenSSH. Он поддерживает прокси-команду и туннели, которые упрощают использование jump host.

Если Net :: SSH является вашим единственным вариантом, то я боюсь, что единственный способ сделать это - использовать какое-то ожидаемое поведение, например. Net :: SSH :: Expect.

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