パスワードを指定せずにシステム間でルートファイルをrsyncする

パスワードを指定せずにシステム間でルートファイルをrsyncする

これは私にとって非常に難しいように思えます。

パスワードを指定せずに、2 つのシステム間でファイルをやり取りできるように設定しましたrsync。問題は、rsyncに属するファイルrootです。両方のシステムには、ルート パスワードがありません。ルートになる唯一の方法は、 を使用することですsudo。したがって、 のパスワードを指定するsudo rsyn local root@remote:ことも、ssh-agent を使用してパスフレーズを入力することもできません。どのシステムにもルート パスワードを設定したくありません。また、両方のシステムでファイルがルートによって所有されている必要があります。

編集: に属するファイルの使用はroot単なる例です。権限のないアカウントでシステム ファイル (ルート所有のファイルを含む) を簡単に読み書きできる方法が必要です。1 つの例は、構成済みの /root 環境を新しくインストールしたシステムにコピーすることです。2 つのシステムは実際には単一のホストの下にある 2 つの VM であるため、それらの間でルート所有のファイルをコピーすることは大きな問題ではありません。

編集2: 設定した /root 環境を新しくインストールしたシステムにコピーするだけの場合は、tar を使用できます。

sudo tar cvzf - /root | ssh me@remote sudo tar xvzf - -C /

rsyncしかし、時々更新する必要があります。それを実現する簡単な方法はありますか?

編集3: 質問を正式に定式化する

rsyncさて、それはすべて、パスワードを指定せずに、通常の非特権ユーザーとして2つのシステム間でルートに属するファイルを転送する方法という質問から始まりました。

  1. アカウントrootは両方のシステムでロックされています。つまり、パスワードはありませんroot。ルートになる唯一の方法は、sudo(推奨されるセキュリティプラクティス、参照)を介してです。http://help.ubuntu.com/community/RootSudo
  2. 完全にパスワードなしの環境は望んでいませんsudoが、常にパスワードを入力したいわけでもありません。
  3. 通常の権限のないユーザーが SSH エージェントに SSH パスフレーズを入力しました。

ありがとう

答え1

オプションを巧みに使用して rsync で直接実行することもできます--rsync-path。つまり、次のように使用します。

rsync -a -e "ssh" --rsync-path="sudo rsync" localdir/ [email protected]:/remotedir

これには、リモート ホスト上の「sudo rsync」がパスフレーズを要求しないことが必要であることに注意してください。これは、いくつかの方法で実現できます。

  • rsync を実行する前にリモートで実行しますsudo -v(1 回限りの rsync ジョブに最適)。tty_ticketsこれを機能させるには、sudo でオプションを使用しないでください。
  • リモートホストにusername ALL= NOPASSWD:/usr/bin/rsync入力します。/etc/sudoers
  • 使用してpam-ssh-エージェント認証リモコンで/etc/pam.d/sudo

もちろん、「rsync over ssh」の代わりに「rsync in daemon mode」(Debian GNU/Linux の例を参照)を使用して、目的を達成することもできますrsyncd.conf(5)/etc/default/rsyncさらに、転送速度が向上するという利点もあります。

答え2

ソリューション。

  1. ユーザーの SSH キーをリモート ルートに追加することはできますが、まだ途中までしか機能していません。つまり、機能さrsyn ... root@remote:...せるのが困難な部分です。sudo rsyn ...
  2. 動作させるためにsudo rsyn ...必要なのは、sudo認証にSSHエージェントを使用することです。http://www.evans.io/posts/ssh-agent-for-sudo-authentication/
  3. Ubuntuでpam-ssh-agent-auth PAMモジュールをインストールするには、私が構築したppaを使用できます。https://launchpad.net/~suntong001/+archive/ppaUbuntu 12.04 precise および 13.10 saucy で正常にテストされました。

HTH

答え3

もう 1 つの方法は、両方のサーバーに rsync スクリプトを含む .sh スクリプトを作成することです。

次に、cronjob または ssh 経由で実行します。

ssh not-your-root-user@remoteserver sudo sh your-rsync-script.sh

または、rsyncスクリプトをssh経由で直接実行します。

ssh not-your-root-user@remoteserver sudo rsync local root@remote

スケジュールされた rsync ジョブの場合は、cronjob を使用することをお勧めします。

答え4

それは何をしたいかによります。両方のシステムでファイルを root が所有する必要がありますか? 単にバックアップを行う場合は必要ありません。rootrsyncとして実行し、リモート サーバーに通常のユーザーとしてログインするだけで済みます。

rootローカルがリモートの通常ユーザーとしてログインするためのキーを作成します(xpt通常ユーザーの名前として使用します)。

sudo -i
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub xpt@remote

sshこれで、パスワードなしで、またはrsync(root として) 次のように実行できるはずです。

rsync /path/to/local xpt@remote

両方のシステムでファイルを root が所有する必要がある場合、状況は少し複雑になります。最も簡単な方法は、両方のシステムで root パスワードを設定することです。

sudo -i
passwd 

これで、思う存分 root としてログオンできるようになりました。

もちろん、最高やるべきことはルートとしてネットワーク経由でファイルをコピーしないなぜそうしたいのかは想像もつきませんし、リスクを考えると労力に見合うものではありません。ファイルをコピーして、sudoコピーしたら必要に応じて操作するだけです。


アップデート:

繰り返しますが、これを行う最も簡単な方法は、各マシンに root パスワードを作成し、root としてコピーすることです。なぜこれを望まないのか理解できません。これは、 を実行するのと同じくらい簡単ですsudo passwd

とにかく、root パスワードを作成したくない場合は、これを回避する唯一の方法は、次の 2 つのコマンドを実行することです。

  1. 実行してrsync、ユーザーが書き込み可能なディレクトリにコピーします (mktmpランダムなディレクトリ名を作成するために使用します)。

    dir=`mktemp -u`; && sudo rsync -avz /root xpt@remote:$dir
    
  2. コンテンツを移動するremote:/root

    ssh -t lacoloc@badabing sudo rsync -avz "$dir"/* /root
    

    このオプションは tty の割り当てを強制し、リモート システムでコマンド-tを実行するために必要です。sudo

これをファイルに追加することで、2 つを組み合わせることができます~/.bashrc(bash を使用していない場合はお知らせください)。

function Rrsync(){
    dir=`mktemp -u` &&
    sudo rsync -avz $1 $2:$dir &&
    ssh -t $2 sudo rsync -avz $dir/ $3 && rm -rf $dir
}

次のように関数を呼び出すことができます。

Rrsync /root xpt@remote /root
------ ----- ---------- -----
   |     |       |        |---> The target directory on the remote server
   |     |       |------------> username@server 
   |     |--------------------> Path to local source directory
   |--------------------------> The function name

/ディレクトリをコピーするのか、ディレクトリの内容をコピーするのかに応じて、rsync ソースとターゲットから末尾のスラッシュを追加/削除する必要がある場合があることに注意してくださいman rsync。 を参照してください。

これをパスワードなしで動作させるには、冒頭で説明したようにssh-keygen、 root として実行する必要があります。ローカル マシン用に 1 回、リモート用に 1 回、2 つのコマンドssh-copy-idに対してパスワードを入力する必要があります。sudo

関連情報