私はUbuntu 11.04で動作するWebサーバーとUbuntu 11.10で動作するアプリケーションサーバーを備えたDMZを持っています。私は、Webサーバーからアプリケーションサーバーにscpできるように設定しました。
ssh-keygen
ssh-copy-id [email protected]
ここで、192.168.1.6 はアプリケーション サーバーのローカル IP アドレスで、peter はログイン アカウント名です。ただし、PHP ファイル内のコマンドを使用して、LAMP ベースの Web サイトからの呼び出しに応答してファイルをコピーしたいと考えています。問題は、Web アプリケーションの「ユーザー」が www-data であり、実際のユーザーではないため、キーを作成できないことです。
概説した手順を試してみましたここ私はその後
su
su www-data
Web サーバー (Berkeley の議論によると「サーバー」だと思います) で。残念ながら、アプリケーション サーバー/クライアントに scp しようとすると、依然としてパスワードを求められます。
私は試した
scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
出力は、peter アカウントから (正常に) scp を実行したときとほぼ同じでした。ただし、最後の数行は異なります。
debug1: Authentications that can continue: publickey,password
debug1: Offering DSA public key: /var/www/.ssh/id_dsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug1: Offering ECDSA public key: /var/www/.ssh/id_ecdsa
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
debug1: Next authentication method: password
[email protected]'s password:
問題がどこにあるのかを教えていただくか、見つけるのを手伝っていただけると大変ありがたいです。
答え1
あなたが提供したリンクを読みました: authorized_keys2 ではなく authorized_keys を使用していることを確認してください。後者は何年も前から非推奨になっており、OpenSSH の一部のバージョンではまったく機能しませんでした。
これを診断する最も簡単な方法は、SSH サーバーのデバッグ インスタンスを使用することです。サーバー上で、次のコマンドを実行します。
# /usr/sbin/sshd -ddep 2222
... SSH デーモンをデバッグ モードで実行し、ポート 2222 をリッスンします。次のコマンドで scp コマンドをやり直します。
$ scp -o port=2222 ...
...そしてサーバーの応答を確認します。
John のセキュリティ上の懸念について: www-data アカウントを引き続き使用することに決めた場合は、authorized_keys の「強制コマンド」オプションを使用して、そのキーを特定の操作 (特定のファイルの転送など) のみに制限できます。
答え2
あなたは試してみたと言った
scp -vv /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
しかし、使用したいキーがどこにも表示されません。次を試してください:
scp -vvv -i /path/to/private/key /var/www/Src/*.txt 192.168.1.6:/var/www/Dest
とにかく、接続がこの特定のコマンドに制限されていることを確認する必要があります。 SCP がコマンドを制限する方法 (SSH による強制コマンドなど) を提供しているかどうかはわかりません。 その場合は、代わりに rsync ではなく SSH を使用して、rsync コマンドのみが起動されるようにします。 これは基本的に scp と同じサービスを提供しますが、キーに force コマンドのタグを付けることができるため、より安全になる可能性があります。
答え3
私は、John Gardeniers が提案した方法を実装するために inotify を使用しました。簡単で、今では問題なく動作しています。ディレクトリ内のファイルが変更されたときに PHP コードから実行できるように scp を実行する C++ アプリケーションを作成しました。問題なく動作しています。
ありがとう、
ピーター