Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何以编程方式获取有状态ssh外壳会话?_Perl_Ssh_Openssh - Fatal编程技术网

Perl 如何以编程方式获取有状态ssh外壳会话?

Perl 如何以编程方式获取有状态ssh外壳会话?,perl,ssh,openssh,Perl,Ssh,Openssh,我正在开发一个需要向远程服务器发送命令的应用程序。使用过多的SSH客户端库发送命令非常简单 但是,我希望在每个命令之间保留shell状态(即当前工作目录、环境变量等)。我见过的所有客户端库都不这样做。例如,下面是一个代码示例,它不做我想做的事情: use Net::SSH::Perl; my $server = Net::SSH::Perl->new($host); $server->login($user, $pass); $server->cmd('cd /var');

我正在开发一个需要向远程服务器发送命令的应用程序。使用过多的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')
这样的命令是不可接受的。

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

做你想做的,尽管“Expect”way并不完全可靠,因为它将解析命令的输出,并尝试检测shell提示符何时再次出现。

只要您只运行知道如何解析输出的命令就可以了。@Joshua:嗯,我后来发现Net::SSH::Expect没有使用任何逻辑来确定命令何时完成。它只是有一个(可定制的)超时,并假设该命令在超时结束时完成。完全不可靠!EWW。那么你最好直接在expect中写下这该死的东西。