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
当从命令行调用PHP SSH连接时,通过exec的PHP SSH连接可以工作,但不能通过apache_Php_Ssh_Exec - Fatal编程技术网

当从命令行调用PHP SSH连接时,通过exec的PHP SSH连接可以工作,但不能通过apache

当从命令行调用PHP SSH连接时,通过exec的PHP SSH连接可以工作,但不能通过apache,php,ssh,exec,Php,Ssh,Exec,我的情况类似,但不一样 情景:我在两台服务器之间交换了ssh密钥,切换到www-data用户,通过ssh连接到第二台服务器时不需要密码 测试1:sshuser@10.8.0.6文档/run.sh列表 在shell中执行时工作良好 测试2:在PHP文件中放入一个简单的PHP Exec就可以了。它返回一个数组,返回值为0 测试3:将exec放入一个“大”PHP脚本并调用它将导致Retval 255(致命错误?!) 所以现在我真的不明白为什么它不起作用。我试图找出关于retval 255的更多细节,但

我的情况类似,但不一样

情景:我在两台服务器之间交换了ssh密钥,切换到
www-data
用户,通过ssh连接到第二台服务器时不需要密码

测试1:sshuser@10.8.0.6文档/run.sh列表 在shell中执行时工作良好

测试2:在PHP文件中放入一个简单的PHP Exec就可以了。它返回一个数组,返回值为0

测试3:将exec放入一个“大”PHP脚本并调用它将导致Retval 255(致命错误?!)

所以现在我真的不明白为什么它不起作用。我试图找出关于retval 255的更多细节,但没有走远

差异一定在PHP5与PHP5 cli中的某个地方。但在我不得不使用OpenVPN之前,它也可以通过正常的Apache调用正常工作。

Generic
shell\u exec
问题的第一级诊断是通过生成相同的命令添加2>&1(例如,在您的案例中)来尝试获取更多信息错误

$retval = shell_exec("/path/to/ssh ... 2>&1");
和检查
$retval

更新 “主机密钥验证失败”表示运行Apache的用户的
~/.ssh/known_hosts
包含不同的密钥。在文件中签入主机名和IP密钥;在紧急情况下,删除这两个键,以用户身份登录www data,并通过手动连接恢复键

如果使用主机名连接,也可能是由于DHCP或不同的VPN隧道启动,IP发生了更改,而这不是您要查找的主机

在SSH的情况下,可以使用
-vvv
非常详细的选项执行它,然后通过千字节的输出进行解析,搜索
已知的\u主机
文件的源。它还可以用于诊断命令,例如

$ret = shell_exec('set');
查看
HOME
变量的值。

Generic
shell\u exec
问题的第一级诊断是通过生成相同的命令添加2>&1(例如,在您的案例中)来尝试获取更多信息错误

$retval = shell_exec("/path/to/ssh ... 2>&1");
和检查
$retval

更新 “主机密钥验证失败”表示运行Apache的用户的
~/.ssh/known_hosts
包含不同的密钥。在文件中签入主机名和IP密钥;在紧急情况下,删除这两个键,以用户身份登录www data,并通过手动连接恢复键

如果使用主机名连接,也可能是由于DHCP或不同的VPN隧道启动,IP发生了更改,而这不是您要查找的主机

在SSH的情况下,可以使用
-vvv
非常详细的选项执行它,然后通过千字节的输出进行解析,搜索
已知的\u主机
文件的源。它还可以用于诊断命令,例如

$ret = shell_exec('set');

要查看
HOME
变量的值。

首先尝试通过使用
2>&1
生成SSH来获取更多信息,例如
$retval=shell_exec(“/path/to/SSH…2>&1”),以便您可以检查
$retval
。这可能会给你一些简单的解决方法。否则,我将尝试使用“诊断”答案。thx提示非常好:返回主机密钥验证失败。因此,尽管它在命令行上处理www数据,但主机验证在这里不起作用(奇怪……Gern geschehen:-)。是什么?我重新检查了一下,我将www数据的主目录更改为主文件夹,在那里我创建了ssh密钥www data:x:33:33:www data:/home/www data:/bin/shI发现了类似的问题,以防对其他人有所帮助。。。我可以在命令行上使用ssh,但在从脚本运行时不能。问题是,当我登录到执行ssh的机器时,代理转发已打开(在Putty中),因此我的证书(即我没有获得正确的权限)没有出现问题,因为它使用了我的转发密钥。我必须关闭代理转发以查看脚本可能也在获取但未在输出中捕获的错误消息。首先尝试通过使用
2>&1
生成SSH来获取更多信息,例如
$retval=shell_exec(“/path/to/SSH…2>&1”),以便您可以检查
$retval
。这可能会给你一些简单的解决方法。否则,我将尝试使用“诊断”答案。thx提示非常好:返回主机密钥验证失败。因此,尽管它在命令行上处理www数据,但主机验证在这里不起作用(奇怪……Gern geschehen:-)。是什么?我重新检查了一下,我将www数据的主目录更改为主文件夹,在那里我创建了ssh密钥www data:x:33:33:www data:/home/www data:/bin/shI发现了类似的问题,以防对其他人有所帮助。。。我可以在命令行上使用ssh,但在从脚本运行时不能。问题是,当我登录到执行ssh的机器时,代理转发已打开(在Putty中),因此我的证书(即我没有获得正确的权限)没有出现问题,因为它使用了我的转发密钥。我必须关闭代理转发以查看错误消息,脚本可能也在获取,但未在输出中捕获。好的开始,我的系统上一定有权限错误我为www用户创建了/home/www数据并将其更改为www数据:www数据,但当我更改为www数据“su www数据”时并在主目录“ls:无法打开目录:权限被拒绝”上尝试和ls-all虽然权限在0755APACHE_LOCK_DIR='/var/LOCK/apache2'APACHE_LOG_DIR='/var/LOG/apache2'APACHE_PID_FILE='/var/run/apache2.PID'APACHE_run_DIR='/var/run/apache2'APACHE run组='www-data'APACHE_run_USER='www-data'IFS='LANG='C'optand='1'PATH='/usr/local/bin:/usr/bin:/bin'read't短语:无法打开/passty/dev/No