当服务器 A 上加载网页时,我希望它在服务器 B 上运行脚本。我可以通过登录服务器 B 并执行脚本,使用服务器 A 中的一系列命令来完成此操作,但需要全部完成一条语句,以便 PHP 可以执行它。
这有效:
user@A$ sudo -u www-data bash
bash: /home/user/.bashrc: Permission denied
然后:
www-data@A$ ssh -i /etc/ssh/www-data/id_rsa remote@B
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-32-generic x86_64)
然后:
remote@B$ /home/web/script.php
(没有输出,但我可以在数据库中看到结果)
所以我可以看到每个人都可以访问消息的去向。但是当我尝试将其合并为一个语句时:
user@A$ sudo -u www-data bash
bash: /home/zen/.bashrc: Permission denied
(就像 apache / php 一样)
www-data@A$ ssh -i /etc/ssh/www-data/id_rsa remote@B `/home/remote/script.php`
然后我得到:
bash: /home/remote/script.php: No such file or directory
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-32-generic x86_64) ....
它还让我登录到 B,这是不相关但奇怪的。
然后,作为健全性测试,我继续从那里运行脚本:
remote@B$ /home/remote/script.php
预先感谢您的任何建议!
答案1
引用的优先顺序可能是问题所在:
ssh remote@B `/home/remote/script.php`
与以下内容有很大不同:
ssh remote@B '/home/remote/script.php'
第一种情况下,shellscript.php
在本地计算机上进行调用,这可能不会返回任何内容,因此命令最终为ssh remote@B
,为您提供了一个交互式 shell。
第二个命令将语句 ( /home/remote/script.php
) 传递ssh
到远程计算机上的 shell。
尝试将反引号更改为单引号。