• 締切済み

SCPのファイル転送について

複数のサーバに圧縮ファイルを転送するプログラムを考えています。 ---プログラム--- $server = array("hoge1.sample.co.jp", "hoge2.sample.co.jp"); foreach($server as $host){ $BaseDir = "/home/tmp/data"; $cmd = "cd $BaseDir;tar cvfz data.tar.gz data1 data2 data3"; system($cmd); ###ファイル圧縮 transfer($BaseDir,$host); } function transfer($base,$host){ $cmd = "scp ${base}/data.tar.gz $host:$base"; system($cmd); ###ファイル転送 } ------------------ このときscpで転送を行う際にパーミッションがないとエラーが表示されて転送ができません。プログラムの中で転送先のフォルダにパーミッションを与える方法など考えたんですが、なかなかいい方法が思いつきません。フォルダにパーミッションを与えて転送できるようにするにはどうしたらよいでしょうか。

みんなの回答

回答No.2

>相手先ホストのアカウントがなく、転送先フォルダにパーミッションがない場合、PHPのプログラムでパーミッション与えるのは難しいでしょうか?? 相手先ホストのアカウントが無い場合、当然ながらSCPもSSHもできませんよ(できたら大変です)。 状況がよく判りませんが、転送元ホストのshellから、転送先ホストの所定のディレクトリにSCPやSSHを使ってファイルを置けないのであれば、PHP以前の問題です。 まず、転送元ホストのshellから、ファイルを転送先に送り込む方法を確立する必要があるかと思います。

tadao1213
質問者

お礼

ご回答ありがとうございます。 指摘していただいた内容を踏まえてもう一度考えてみたいと思います。

回答No.1

>このときscpで転送を行う際にパーミッションがないとエラーが表示されて転送ができません。 なぜ、あらかじめパーミッションを与えておかないのでしょうか? >プログラムの中で転送先のフォルダにパーミッションを与える方法など考えたんですが、 SCPが通るということは、SSHが通るのでしょうから、 http://pecl.php.net/package/ssh2 ( 解説 http://www.doyouphp.jp/tips/tips_ssh2.shtml ) で相手先ホストにログインして、フォルダにパーミッションを与えるプログラム(setuid付き)を起動することはできると思います。 もしくは、単純に、フォルダにパーミッションを持っているユーザ(以下のfoobar)で、scpアクセスするとか。 scp ${base}/data.tar.gz foobar@$host:$base また、転送方法を逆方向にするとか。つまり、AサーバからBサーバにPUTしているのを、BサーバからAサーバにGETしにいくようにするということです。 とりあえず、思いついたものを書いておきました。 もし参考になれば。

tadao1213
質問者

補足

>なぜ、あらかじめパーミッションを与えておかないのでしょうか? 実は転送先のフォルダの所有者はすでに決まっていて変更できないことになっているんです。分かりやすく書くと以下のような形になります。 -------------------------------------------------- Aサーバ(転送元のサーバ) 転送するファイル:/home/tmp/data/data.tar.gz ↓ Bサーバ(相手先ホスト) 転送先:/home/tmp/data → このフォルダの所有者は変更できない --------------------------------------------------- >もしくは、単純に、フォルダにパーミッションを持っているユーザ(以下のfoobar)で、scpアクセスするとか。 実は現在、相手先ホストにはアカウントがないのでログインできない状態なんです。相手先ホストのアカウントがなく、転送先フォルダにパーミッションがない場合、PHPのプログラムでパーミッション与えるのは難しいでしょうか??

関連するQ&A

専門家に質問してみよう