首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中解析SSH2结果

在PHP中解析SSH2结果
EN

Stack Overflow用户
提问于 2014-06-23 16:43:39
回答 1查看 1.4K关注 0票数 0

我使用phpseclib 0.3.6在Windows 2003标准32位上运行PHPNTS5.3.28。我正在尝试创建一个脚本,它将连接到Palo网络防火墙,并执行一个命令来散列密码。我有以下代码:

代码语言:javascript
复制
<?php
include 'Net/SSH2.php';

define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);

$ssh = new Net_SSH2('hostname');
echo ">Logging in...\n";
if (!$ssh->login('user', 'password')) {
    exit('Login Failed');
}
echo ">Reading login results...\n";
/*echo $ssh->exec('request password-hash password test123');*/
$output = $ssh->read('user@PA-3020>');
echo $output . "\n";
echo ">Writing request...\n";
$ssh->write("request password-hash password test123\n");
$ssh->setTimeout(10);
echo ">Reading result...\n";
$output = $ssh->read('/^\$1\$.*$/', NET_SSH2_READ_REGEX);
echo $output . "\n";
echo ">Done.\n";
file_put_contents ('E:\PHP53\ssh2.log', $ssh->getLog());
?>

上面的代码有两个问题:

  1. 如果我省略了setTimeout(10),那么下一个$ssh->read的代码就永远不存在了。如果我有它,那么代码只存在于超时之后,但确实返回结果。
  2. 它返回的结果包括一堆不该出现的东西: ??[Kuser@PA-3020>请求密码-散列密码test123?[?1h?=?[24;1H?]$1$dgkhwrxe$kddYFmKCq9.zfiBKPAyN 61 ?[24;1H][K?[?1L?>user@PA-3020]

我只想要以$1美元开头的行(上面第3行)。我想这和正则表达式有关,但我想不出是什么。

如果我与PuTTY交互地运行该命令,就会得到以下内容:

代码语言:javascript
复制
user@PA-3020> request password-hash password test123

$1$pxqhdlco$MRsVusWtItC3QiMm4W.xZ1

user@PA-3020>

更新:

根据下面neubert的建议,将行替换为$output =$ssh->读.使用以下代码工作:

代码语言:javascript
复制
$output = $ssh->read('/\$1\$.*/', NET_SSH2_READ_REGEX);
$output = preg_replace('/.*\$1\$/s','\$1\$', $output);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-23 19:05:34

它返回的结果包括一堆不该出现的东西: ??[Kuser@PA-3020>请求密码-散列密码test123?[?1h?=?[24;1H?]$1$dgkhwrxe$kddYFmKCq9.zfiBKPAyN 61 ?[24;1H][K?[?1L?>user@PA-3020]

这些是ANSI转义码。您可以使用File_ANSI删除它们。更多信息:

http://phpseclib.sourceforge.net/ssh/examples.html#top

不管怎么说,我猜你需要重新做你的regex。例如:

代码语言:javascript
复制
$output = $ssh->read('/^\$1\$.*$/', NET_SSH2_READ_REGEX);

没有这样做,而是这样做:

代码语言:javascript
复制
$output = $ssh->read('/\$1\$/', NET_SSH2_READ_REGEX);

问题是..。^匹配在行的开头,$匹配在末尾。通常当你写$ssh->写(.)命令回显返回到您,然后有一个新的行,然后您得到您的输出。这样就不能让^工作了。至于最后的$..。好吧,根据您自己的例子,$1$不会出现在行尾。所以这就是为什么你的代码不能工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24371104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档