如何以编程方式获取有状态的ssh shell会话?

时间:2011-07-20 19:07:06

标签: perl ssh openssh

我正在开发一个需要向远程服务器发送命令的应用程序。使用大量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')这样的命令的组合。

2 个答案:

答案 0 :(得分:2)

Net::SSH::Expect做你想要的,虽然“Expect”方式并不完全可靠,因为它将解析命令的输出并试图检测shell提示何时再次出现。

答案 1 :(得分:0)

我不确定你到底做了什么,但你可以开始一个SSH会话。如果你真的不能这样做,也许你可以只使用绝对路径。