WebページがサーバーAにロードされたら、サーバーBでスクリプトを実行したいと思います。サーバーBにログインしてスクリプトを実行して、サーバーAの一連のコマンドを使用してこれを実行できますが、PHPが実行できるようにするには、これらすべてのタスクを1つのステートメントで完了する必要があります。
これは働きます:
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
(出力はありませんが、データベースから結果を見ることができます)
だから、誰もがメッセージがどこに行くのかを見ることができます。しかし、この内容を1つの文にまとめようとすると、次のようになります。
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'
最初の場合、シェルはscript.php
ローカルコンピュータから呼び出され、何も返さない可能性があるため、コマンドは最終的にssh remote@B
対話型シェルを提供します。
2番目のコマンドは、ステートメント(/home/remote/script.php
)をssh
リモートシステムのシェルに渡します。
バックティックを一重引用符に変更してみてください。