私は軽量のカスタムファイル同期システムを直接設定しようとしています。サーバーが特定のフォルダの変更(使用法inotify -m
)を監視し、変更が検出されたら接続されたクライアントにそれを伝播できるようにしたいです。
私の最初の考えは、クライアントシステムにSSHトンネルを起動させ、次に(を使用してssh -R 2222:127.0.0.1:22
)適切な場合にサーバーにクライアントにファイルを再送信させることでした。しかし、プロセスを自動化するにはSSHキーを設定する必要がありました。私はchroot Jailのようなリスクを軽減する方法があることを知っています。スポリところで、ただ99%まで満たそうと大きな穴を開けるのはちょっと厄介だと思います。
セキュリティの問題が許可によるものであることがわかりました。サーバーがクライアントにプッシュする、持つよりクライアントがサーバーから取得します。。ダイナミックIPとホームルータの背後に隠されたクライアントがサーバーの信号に対して特定のポートを監視できるようにトンネルを開くために使用できる他のプログラムやプロトコルはありますか?いいえSSHトンネルのような仕事のために開きますか?
答え1
まず、自家製の「信号ソリューション」には明確ではない競争条件がある可能性があることに注意してください。最後の信号を処理している間に信号が見逃さないように注意してください。
簡単なアイデアは、サーバーがその行をローカルファイルに追加することです。したがって、すべてのinotifyの結果は次のようになります。
date +"%s" >> /path/to/sync-signals.log
クライアントはssh / tailを介してファイルを監視しますが、すべてのインポート操作はクライアントから呼び出されます。
ssh server "tail -n1 -f /path/to/sync-signals.log" | while read -r sigdate; do
pull from server
done
このソリューションは「シグナル」を見逃すべきではありませんが、サーバーが短時間で多くの信号を接続すると、不要な「プール」が発生する可能性があります。したがって、クライアント側のwhileループは何とか最後の「sigdate」を現在の日付と比較する必要があります。あるいは、より良い方法は、サーバーが何らかの方法でシグナルを遅らせることです(数秒後に何も変更がない場合は、行を追加するだけです)。