如何在服务器上使用SSH命令执行本地Shell脚本?

时间:2018-11-18 21:29:44

标签: php bash shell ssh

我想使用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.phpmy_local_shell.sh所需的权限。

有什么想法我该怎么做?

1 个答案:

答案 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>";