我想使用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
所需的权限。
有什么想法我该怎么做?
答案 0 :(得分:0)
scp显然使用了某些您无法捕获的ncurses,因此可以在shell脚本中的-sp命令中添加-v标志
scp -v -P $port $user@$host:/home/remote/file.log /home/local/file.log
或者,由于scp成功返回0,因此您可以编写
scp -P $port $user@$host:/home/remote/file.log /home/local/file.log && echo Success
对于PHP,请检查您是否具有PHP的开始和结束标记,并更正您的echo语句
echo "<pre>".$output."</pre>";