2016-03-22 29 views
2

Uzak makineden bir SSH gerçekleştirmek zorundayım. Bu makinede, Net :: SSH :: Perl yani 'cmd' kodu aşağıdaki kodda $ ssh-> cmd komutunu kullanarak giriş yaptım. başka bir SSH (kullanıcı adı @ ana bilgisayar adı). Bu ikinci SSH'nin şifresini geçmek için bir yol var mı ve sonra bu ikinci uzak makinede komutu çalıştır. Ayrıca, ssh anahtar çifti girişleri veya sshpass gibi araçları kullanamıyorum. Birisi yardım edebilir mi?Perl'de SSH içinde ikinci SSH gerçekleştirme

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

İlgili bir soru hatırlıyorum. Bunu gerçekten yapmak zorunda mısın ssh zincirlerinde? Neden tekrar ana bilgisayara ve ssh'e geri dönmeyelim? – zdim

+0

İkinci uzaktan makineye ait SSH, sadece ilk uzak makineden yapılabilir – nebula

+0

Ayrıca bkz. [Tekrarlanan ssh komutunda bash ve perl'de alıntı] (http://stackoverflow.com/questions/23597777/quoting-in-bash-and-perl -in-recursive-ssh-komutu) –

cevap

2

Net :: SSH :: Perl ciddi olarak sınırlanmıştır. Mümkünse bunun yerine Net::OpenSSH'u kullanmanızı öneriyorum. jump host'u kullanmayı kolaylaştıran proxy komutunu ve tünelleri destekler.

Net :: SSH sizin tek seçeneğinizse, bunu yapmanın tek yolunun bir tür bekleyiş şeklini kullanmasıdır. Net :: SSH :: bekleyin.