【问题标题】:How to obtain stateful ssh shell session programmatically?如何以编程方式获取有状态的 ssh shell 会话?
【发布时间】:2011-10-09 16:15:19
【问题描述】:

我正在开发一个需要向远程服务器发送命令的应用程序。使用大量的 SSH 客户端库发送命令很容易。

但是,我希望在每个命令之间保留 shell 状态(即当前工作目录、环境变量等)。我见过的所有客户端库都没有这样做。例如,以下是做我想做的事的代码示例:

use Net::SSH::Perl;
my $server = Net::SSH::Perl->new($host);
$server->login($user, $pass);

$server->cmd('cd /var');
$server->cmd('pwd');      # I _would like_ this to output /var

在发送命令之间还会执行其他任务,因此不能将$server->cmd('cd /var; pwd') 之类的命令组合在一起。

【问题讨论】:

    标签: perl ssh openssh


    【解决方案1】:

    Net::SSH::Expect 做你想做的事,尽管“预期”方式并不完全可靠,因为它会解析你的命令输出并尝试检测 shell 提示符何时再次出现。

    【讨论】:

    • 只要你只运行你知道如何解析输出的命令就可以了。
    • @Joshua:好吧,我后来发现 Net::SSH::Expect 不使用任何逻辑来找出命令何时完成。它只是有一个(可定制的)超时,并假定命令在超时结束时完成。完全不可靠!
    • EWWW。那么你可能会做得很好,然后直接在 expect 中编写该死的东西。
    【解决方案2】:

    我不确定您到底在做什么,但您可以只启动一个 SSH 会话。如果你真的不能这样做,也许你可以对所有事情都使用绝对路径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多