
これは私にとって非常に難しいように思えます。
パスワードを指定せずに、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つのシステム間でルートに属するファイルを転送する方法という質問から始まりました。
- アカウント
root
は両方のシステムでロックされています。つまり、パスワードはありませんroot
。ルートになる唯一の方法は、sudo
(推奨されるセキュリティプラクティス、参照)を介してです。http://help.ubuntu.com/community/RootSudo) - 完全にパスワードなしの環境は望んでいません
sudo
が、常にパスワードを入力したいわけでもありません。 - 通常の権限のないユーザーが 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
ソリューション。
- ユーザーの SSH キーをリモート ルートに追加することはできますが、まだ途中までしか機能していません。つまり、機能さ
rsyn ... root@remote:...
せるのが困難な部分です。sudo rsyn ...
- 動作させるために
sudo rsyn ...
必要なのは、sudo認証にSSHエージェントを使用することです。http://www.evans.io/posts/ssh-agent-for-sudo-authentication/ - 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 つのコマンドを実行することです。
実行して
rsync
、ユーザーが書き込み可能なディレクトリにコピーします (mktmp
ランダムなディレクトリ名を作成するために使用します)。dir=`mktemp -u`; && sudo rsync -avz /root xpt@remote:$dir
コンテンツを移動する
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