このサイトを検索するのは私にとってとても役に立ちましたが、しばらくこの問題のために停滞していました。これが些細な場合は事前にお詫び申し上げます。
2つのCentOS 7サーバーAとBがあります。サーバーAからSSHを介して定期的にデータをサーバーBのディスクに再同期する必要がありますが、このディスクはほとんどマウントされません。サイドcron'ed bashスクリプトしなければならないマウントBサイドディスク最初。
私は別の方法で作業することを考えましたが(B側のクローン操作がディスクをマウントしてAからデータを同期させるようにします)、アプリケーションに関連する理由でAからB方向に行く方が合理的です。つまり、Bはrsyncするフォルダ(数)やマウントするディスクを事前に知りません。 Aだけがこの情報を持っており、データセットが一貫して再同期する準備ができた時期を知っています。
もちろん、サーバーBのssh-LogAsRootはオプションではないので、限られた操作でsudoを使用することを検討しています。サーバーBで特定のユーザー(rsync_user)を定義し、パスワードなしでsudoマウント権限を付与します。
[サーバーB]#cat /etc/sudoers.d/rsync_user.conf rsync_user ALL=NOPASSWD:/usr/bin/mount /dev/md13 /data_mnt
コマンドラインで原理をテストしてみると、次のように作業が完了することを願っています。
[root@serverA]# ssh -i keyfile rsync_user@serverB 'sudo /usr/bin/mount /dev/md13 /data_mnt' ...サーバーBへようこそ... [sudo] rsync_userのパスワード:
しかし、サーバーBは引き続きsudoパスワードを要求します。
入れてみました。sudoマウント....bashrcのrsync_userコマンドをssh経由で渡すのではなく、同じ結果を得ます。SSH経由でNOPASSWD-sudoを使用することに制限はありますか?それとも、sudoerの設定行に何かがありませんか?
sshの-t "pseudo tty"スイッチについて読み、対話型セッションでの使用を理解しましたが、スクリプト接続でこれがどのように役立つかわかりません。
このステップでは、rsync_userがsshを介してサーバーBのテキストファイルにフラグを立て、サーバーBのルート操作を短期間に監視するなど、AとBの間でテキストファイルベースのコマンド/応答交換の種類を設定しようとします。このフラグは、必要なディスクをマウントし、完了したらサーバー A にシグナルを送信するために検出されます。しかし、これを行うより簡単で組み込みで安全な方法があると確信しています。
もしそうなら、「sudoマウント」方法が正しい方向に進んでいますか、それとも別の方法をお勧めしますか?
答え1
command
私はそれをリモートに置き、.ssh/authorized_keys
要求されたパスに従ってラッパーを呼び出すオプションを選択します。同期マウントディスクを通過した後(またはワイルドカードが不都合なsudo
ので、他のラッパーを呼び出す方が良い)、ベースは残りのタスクを実行します。sudo
sudo
SSH_ORIGINAL_COMMAND
command="sh $HOME/bin/rsync_wrapper" ssh-rsa ... rsync-job
リモートホストでrsyncを呼び出す方法を見てください。rsync
このSambaラッパーの仕組みを学ぶことができます。https://www.samba.org/ftp/unpacked/rsync/support/rrsync(つまり、rsyncクライアントはリモートノードを呼び出してrsync --server --sender -vlogDtpr --partial . <ARGS>
からアクセスできますSSH_ORIGINAL_COMMAND
。)