我想在使用 Net::SSH::Any 连接到服务器后在同一 session 中执行多个命令。
我的示例代码如下:
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
如何在单个 session 中执行多个命令?
最佳答案
您必须像这样在远程 shell 中链接命令:
my $cwd = $ssh->capture( q{cd /usr/script && pwd} );
<小时/>
您必须这样做,因为即使当前支持的 Net::SSH::Any 后端都提供了其他方法来执行此操作(Net::OpenSSH 有 open2pty
和 Net::SSH2 有 channels ),Net::SSH::Any API 不会公开这些。
例如,system
调用 Net::OpenSSH 的 system
方法或创建 Net::SSH2::Channel 并调用 process('exec' = > $cmd)
(每个 channel 仅限一个命令)。
关于perl - 如何使用 Net::SSH::Any 模块执行一系列命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012122/