我想在使用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
如何在单个会话中执行多个命令?
答案 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>