【发布时间】:2019-04-21 06:47:33
【问题描述】:
我想使用 PHP 在服务器上运行具有 SSH 命令的本地 shell 脚本。在脚本中,我使用ssh 运行类似ls -lart 的命令并将结果保存在服务器的日志文件中,然后使用scp 将远程文件复制到我的本地主机。像这样:
/// my_local_shell.sh
#!/bin/bash
host=$1
user=$2
port=$3
ssh -p $port $user@$host 'ls -lart >> /home/remote/file.log'
scp -P $port $user@$host:/home/remote/file.log /home/local/file.log
如果我使用终端 user@local_host:~$ ./my_local_shell.sh 运行脚本,一切正常。但是如果我使用shell_exec() 使用 PHP 执行脚本,如下所示:
/// index.php
$output = shell_exec("my_local_shell.sh 192.168.1.1 root 2222");
echo <pre>$output</pre>;
屏幕上没有打印任何内容,文件中的 SSH 命令也没有执行。
我知道我可以使用ssh2_shell(),但是通过使用它我必须在 PHP 中发送命令,这不是我想要的。
我已经授予了index.php 和my_local_shell.sh 所需的权限
有什么想法可以做到这一点吗?
【问题讨论】:
-
php 是否使用与您尝试的用户相同的用户运行?
-
是的,同一用户。
-
如果您通过网络服务器运行脚本,则该脚本使用与网络服务器相同的用户运行,通常称为 http 或 www-data。首先通过 CLI 尝试。还要检查 php.ini 是否有禁用的功能。
-
我已经试过了。它不显示任何错误或警告,也不起作用。当我尝试将 ssh 命令的结果直接写入本地文件时,它会创建日志文件(用户 www-data),但其中没有任何内容。
-
试试exec,可以传一个参数来填充输出:php.net/manual/en/function.exec.php