Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在perl中的SSH中执行第二个SSH_Linux_Git_Perl_Ssh - Fatal编程技术网

Linux 在perl中的SSH中执行第二个SSH

Linux 在perl中的SSH中执行第二个SSH,linux,git,perl,ssh,Linux,Git,Perl,Ssh,我必须从我使用Net::SSH::Perl登录的远程计算机执行SSH,即下面代码中传递给$SSH->cmd的“cmd”是另一个SSH(例如username@hostname). 有没有办法传递第二个SSH的密码,然后在第二个远程机器上执行命令。 此外,我不能使用ssh密钥对登录或sshpass之类的工具。有人能帮忙吗 use Net::SSH::Perl; my $hostname = "hostname"; my $username = "username"; my

我必须从我使用Net::SSH::Perl登录的远程计算机执行SSH,即下面代码中传递给$SSH->cmd的“cmd”是另一个SSH(例如username@hostname). 有没有办法传递第二个SSH的密码,然后在第二个远程机器上执行命令。 此外,我不能使用ssh密钥对登录或sshpass之类的工具。有人能帮忙吗

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;
使用Net::SSH::Perl;
我的$hostname=“hostname”;
我的$username=“username”;
我的$password=“password”;
我的$cmd=;
我的$ssh=Net::ssh::Perl->new(“$hostname”,debug=>0);
$ssh->login(“$username”,“$password”);
my($stdout,$stderr,$exit)=$ssh->cmd($cmd”);
打印$stdout;

Net::SSH::Perl受到严重限制。如果可能的话,我建议你改用。它支持代理命令和隧道,使其易于使用


如果Net::SSH是您唯一的选择,那么恐怕唯一的方法就是使用某种类似expect的行为,例如Net::SSH::expect。

我想起了一个相关的问题。你真的要这么做吗,ssh在链子里?为什么不退回到主机并再次从主机进行ssh?只能从第一台远程机器执行到第二台远程机器的ssh。也可以使用以下答案中的方法创建链ssh命令: