如何使用Net :: SSH :: Any模块执行一系列命令?

时间:2015-08-14 14:09:50

标签: perl

我想在使用Net :: SSH :: Any连接到服务器后在同一会话中执行多个命令。

我的示例代码如下:

use strict;
use warnings;

use Net::SSH::Any;

my $host = "ip address";
my $user = "user";
my $passwd = "pass";
my $cmd1 = 'cd /usr/script';

my $ssh = Net::SSH::Any->new($host, user => $user, password => $passwd);
$ssh->system($cmd1);
my $pwd = $ssh->capture("pwd");
print $pwd;

我期待以下输出:

/usr/script

但我得到了:

/home/user

如何在单个会话中执行多个命令?

1 个答案:

答案 0 :(得分:3)

您必须将命令链接到远程shell中,如下所示:

my $cwd = $ssh->capture( q{cd /usr/script && pwd} );

你必须这样做,因为即使目前支持的Net :: SSH :: Any后端都提供了其他方法(Net :: OpenSSH有open2pty而Net :: SSH2有{ {3}}),Net :: SSH :: Any API不公开这些。

例如,system调用Net :: OpenSSH的system方法或创建Net :: SSH2 :: Channel并调用process('exec' => $cmd)(每个通道限制一个命令)。 / p>