web-dev-qa-db-ja.com

sshを介したスクリプトの実行を許可が拒否されました

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

アドバイスをよろしくお願いします!!

2
dab

引用符の優先順位が問題になる可能性があります。

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を介してリモートマシンのシェルに渡します。

逆引用符を一重引用符に変更してみてください。

2
Arcege