gpt4 book ai didi

php 到 shell 脚本到 php 通过无密码 ipv6 ssh 隧道获取值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:07 25 4
gpt4 key购买 nike

拓扑结构是 server1 -> IPv6 ssh 隧道 -> server2(秘诀 = $ip_addr)代码逻辑遵循相同的路径 php cgi 脚本 -> shell 脚本 -> 检索秘诀 $ip_addr 并将其回显出来。我正在尝试从服务器 2 检索 $ip_addr 值并将其显示在启动服务器 1 上。

**** 网络服务器上的代码需要从邮件服务器回显的值 $ip_addr <强>*

<?php

$addr['ip_addr'] = shell_exec('sudo /home/wemail1/cgi-bin/ip_addr_stats');
$ip = $_POST['ip_addr'];
#echo "<pre>$ip['ip_addr']</pre>";
echo $ip['ip_addr'];
var_dump($_POST);


?>

***** shell 脚本从上面执行以调用邮件服务器上的 php 脚本 *

#!/bin/bash
ssh -p 22 -6 2600:3c01:e000:44::14 "php /var/www/localhost/cgi-bin/postUser2master.php .ssh;"

********* 邮件服务器上的脚本检索 $ip_addr ****

<?php
#require_once('auth.php');
$master = fopen('/etc/postfix/master.cf', 'a+');
$id = 'bob';
$ip_addr = '2600:3c01:e000:44:0:0:0:10';
$valid = false;
while (($buffer = file_get_contents('/etc/postfix/master.cf')) !== false) {
if (strpos($buffer,$id) !== false) {
$valid = TRUE;
echo $ip_addr;
break;
}else{
fwrite($master,
"\r\n".$id." unix - - n - - smtp \n
-o syslog_name=postfix-".$id."\n
-o smtp_bind_address6=".$ip_addr."\n"
);

}
echo $ip_addr;
}
fclose($master);

?>

********* **** 来自第一个脚本的错误 ******* ******

var_dump($_POST); -->  Arrayarray(0) { }

Undefined index: ip_addr

********* ** 注意:*********** *****我有另一个脚本可以通过相同的路径和基本相同的代码恢复统计数据,但效果很好。唯一的区别是,我没有调用 pslogsumm,而是调用了另一个 php 脚本。所以没有网络错误需要应对或任何奇怪的事情。就好像它们在 LAN 上一样。

********* *** 更新 *************此命令在命令行上运行完美:

emailer1 cgi-bin # /usr/bin/ssh -p 22 -6 2600:3c01:e000:44::14 '/usr/bin/php /var/www/localhost/cgi-bin/postUser2master.php .ssh'
2600:3c01:e000:44:0:0:0:10emailer1 cgi-bin #

As does this one:

dev-box-201 www # /home/wemail1/cgi-bin/ip_addr_stats
+ ssh -p 22 -6 2600:3c01:e000:44::14 'php /var/www/localhost/cgi-bin/postUser2master.php .ssh'
2600:3c01:e000:44:0:0:0:10dev-box-201 www #

它完美地吐出 ip 地址。这是我需要但无法达到的值(value)。

最佳答案

您似乎对变量名和代码流很困惑。

让我们仔细看看您的代码。

$addr['ip_addr'] = shell_exec('sudo /home/wemail1/cgi-bin/ip_addr_stats');

在这里,您将此 shell 命令的输出分配给变量 $addr['ip_addr']。到目前为止一切顺利。

$ip = $_POST['ip_addr'];

在这里,您将 POST 变量分配给变量 $ip。我不知道你为什么要这样做;没有为此提供上下文,也没有明显的理由这样做。

echo $ip['ip_addr'];

最后,您尝试回显数组成员 $ip['ip_addr'] 的值,这当然是您之前从 POST 变量中获得的。当然,该值不是以数组开头(甚至可能根本不存在),因此您会收到消息:

Notice: Undefined index: ip_addr in /home/wemail1/www/index.php on line 147

最后:

var_dump($_POST);

这当然会返回一个空的 Array。正如我所怀疑的,您一开始并没有执行 POST 请求。


因此,您说您想要 shell 命令的输出。您将其分配给 $addr['ip_addr']。为什么不直接使用它并消除所有这些无关的困惑呢?

关于php 到 shell 脚本到 php 通过无密码 ipv6 ssh 隧道获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18540047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com