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

标签 perl

我想在使用 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/

相关文章:

perl - 从 Perl 调用命令,需要查看输出

perl - 为什么我在比较 Perl 中输入的行时遇到问题?

.net - 构建 .NET 使用的 Perl Soap 服务

perl - 使用 Net::OpenSSH::rsync_get() 方法作为 sudo

perl - 这个 Perl 脚本实现了什么?

mysql - 如何在 Perl 中用一个连接字符串连接 mysql 数据库和 Sybase 数据库?

regex - Perl 中的递归成对大括号匹配

perl - 当我无法在目标主机上安装模块时,如何创建可移植的 perl?

regex - 使用Perl正则表达式获取URI的第二个字符串

perl - 如何在 Perl 中获取全局变量值?