リモートマシンでroot権限でrsyncを実行します


31

マシンのフォルダーをリモートマシンのフォルダーと同期したい。リモートフォルダは、によってのみ操作できますroot。を使用できるリモートマシンにアカウントがありますsudo。リモートマシンでroot権限を持つようにrsyncを実行するにはどうすればよいですか?

私は次を試しました:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="sudo rsync"

しかし(パスワードを入力した後)次のエラーが表示されます。

sudo: no tty present and no askpass program specified

ユーザーがリモートフォルダーに書き込みアクセスできるように、リモートフォルダーのアクセス許可を変更することはできませんか?
フィル

1
残念ながら、これはオプションではありません。
ピーター

Unix SEunix.stackexchange.com/questions/92123/…で同じ質問の答えを確認することをお勧めします。
ndemou

回答:


12

この解決策を試してください。sudoersファイル(/etc/sudoers)で、次のようにユーザーを設定します。

username ALL= NOPASSWD:/usr/bin/rsync

これNOPASSWD:/usr/bin/rsyncsudo、ユーザーが実行するとき、/usr/bin/rsyncまたはrsyncパスワードが不要であることを伝えます。

その後、オリジナル--rsync-path="sudo rsync"が動作するはずです。


rsyncの完了後、ユーザー名ALLを設定せずにsudo rsyncオプションを使用しました。cdまたはlsしようとすると、リモートで。許可が拒否されました。私はルートですが 私はlsにsudoする必要があります。しかし、cdの場合は不可能です。私はすべてのディレクトリとファイルをchownしようとしました。それでも動作しませんでした。誰もが理由とそれを修正する方法を知っていますか?
恐ろしいセミコロン

2
また、sudoersファイルを編集する方法を言う必要があります
ジョナサン

2
この修正のセキュリティへの影響については、unix.stackexchange.com / a / 92397/128237を参照してください。
BrainStorm.exe

11

これは私が思いついた解決策です:

rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S  mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete

ちょっとしたミッション!


12
パスワードがコマンドラインに表示されることをご理解ください。rsyncが実行されている間、表示されるはずです。
-BillThor

1
パスワードはどこに表示されますか?コマンドラインのローカルボックスだけですか?または、このアプローチはリモートの脆弱性も生み出しますか?上記の答えとこのソリューションを使用することの影響を理解しようとしています。ここで質問しました:superuser.com/questions/398146/…–
MountainX

@MountainXプロセスのリストに表示されます(例ps aux)。テスト:rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example、リモートマシンのターミナルを開きps aux | grep findます。find /長い実行時間で頭に浮かんだのはそれだけだからです。
イヴァンヴチカ

1
私はこれが古いことを知っていますが、コマンドでパスワードを避けたい場合は、sshにキーを使用し、リモートマシンでNOPASSWD:ALLフラグを使用してsudoersファイルにユーザーを追加します。次のリンクで最高ランクの回答を参照してください。注:それは受け入れ答えはありませんaskubuntu.com/questions/147241/execute-sudo-without-password
デイブ

10

このブログのソリューションは、私にとって非常にうまく機能しました:http : //www.pplux.com/2009/02/07/rsync-root-and-sudo/

基本的に:

stty -echo; ssh myUser@REMOTE_SERVER "sudo -v"; stty echo  
rsync -avze ssh --rsync-path='sudo rsync' myUser@REMOTE_SERVER:/REMOTE_PATH/ LOCAL_PATH 

最初の行では、画面にパスワードを表示せずに、インタラクティブなパスワード入力が可能です。Ubuntu 9.04で私に最適です。


1
これには、tty_ticketsオプションの設定を解除する必要があります!tty_tickets
11

2
ssh -t [other options]で遊ぶ代わりにどうstty -echoですか?
イヴァンヴチカ

私の場合、私はすでに設定を解除しました:tty_ticketsとにかく...だから私はこのアプローチを試すことができます。
MountainX

1
sudo: no tty present and no askpass program specified
マイケル

tty_ticketsをどのように設定解除しますか?どのマシンに?このrsyncコマンド中に?
ジョナサン

4

にパスワードを提供する方法が必要ですsudoaskpassこのプログラムは、通常のメカニズムが利用できない場合、パスワードを求めるように設計されています。ユーザーIDとしてsudo実行するためにパスワードを要求しないように設定することrsyncは1つのオプションです。

私は通常、このような場合に適切な制限付きでキーベースのログインを設定します。rsyncルートとしてのみ実行される制限されたキーを設定すると、この種の操作がより簡単になります。もう1つの方法は、rsycndプロセスを使用してリモート要求を処理することです。この構成には、適用可能なさまざまな制限があります。

編集:LinuxでのBackupPCのセットアップに関する私の投稿の「クライアントでのユーザーIDの作成」セクションに、キーベースのローイングのキーをセットアップするスクリプトを含めました。また、ssh_configのドキュメントを参照してください。このドキュメントには、スクリプトに示されているように、キーの使用を制限することで実行できることの詳細が記載されています。


あなたの助けをありがとう、しかし私は私のためにうまくいく解決策を見つけました。
ピーター

キーベースのログインに関する詳細
TheVillageIdiot


2

既存の回答の複雑さに驚かされます。それはだ遠くパスワードを使用せずに、リモートホストにrootとして接続できるように、(あなたのPCとリモートホスト)あなたのシステムを構成するために簡単かつ便利。そして、それの外観とは異なり、それも安全です。

  1. リモートホストで、/ etc / ssh / sshd_configにこの行「PermitRootLogin without-password」があることを確認してください(多くのディストリビューションではデフォルトで存在します)。これにより、root は安全でないパスワードプロンプト以外の認証方法使用してsshシェルを取得できます。
  2. (まだ方法がわからない場合)sshを介してパスワードなしのログインを取得する方法に関する多くのチュートリアルのいずれかに従ってください
  3. 通常のように、パスワードプロンプトなしでrsyncを使用します。

リモートホストの/root/.ssh/authorized_keysの行がそこにある限り、そのマシンがPCからルートコマンドを受け入れることを忘れないでください。


rrsyncはこのアプローチを使用します。
コードリード

0

私がパスワード認証を維持したいので、私のために働いたものはここにあります(したがって、私はNOPASSWDキーまたはキーを使用したくない)-Ubuntu 14.04で:

  • 一時ファイル(Debianでサポートされている必要があります、を参照)をsudo無効にしtty_ticketsてリモートマシンで「開く」、「sudoタイムアウトをさらに15分間延長する」「ユーザーのキャッシュされた資格情報を更新する」/etc/sudoers.d//etc/sudoers.d/README
  • 他の回答に示されrsyncsudoいるようにwith を実行します
  • sudoの一時ファイルを削除することにより、リモートマシンで「閉じる」/etc/sudoers.d/ことにより、再び有効になりますtty_tickets

...または、コマンドラインで:

ssh -t $REMOTEPC 'echo "Defaults !tty_tickets" | sudo tee /etc/sudoers.d/temp; sudo -v'
rsync -aP -e 'ssh' '--rsync-path=sudo rsync' /etc/pulse/client.conf $REMOTEPC:/etc/pulse/client-copy.conf
ssh -t $REMOTEPC 'sudo rm -v /etc/sudoers.d/temp; sudo -v'

これらは、ローカルマシンでこれらのコマンドを実行したときに得られる応答です。

$ ssh -t $REMOTEPC 'echo "Defaults !tty_tickets" | sudo tee /etc/sudoers.d/temp; sudo -v'
remoteuser@$REMOTEPC's password: 
[sudo] password for remoteuser: 
Defaults !tty_tickets
Connection to $REMOTEPC closed.

$ rsync -aP -e 'ssh' '--rsync-path=sudo rsync' /etc/pulse/client.conf $REMOTEPC:/etc/pulse/client-copy.conf
remoteuser@$REMOTEPC's password: 
sending incremental file list
client.conf
           1269 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/1)

$ ssh -t $REMOTEPC 'sudo rm -v /etc/sudoers.d/temp; sudo -v'
remoteuser@$REMOTEPC's password: 
removed ‘/etc/sudoers.d/temp’
[sudo] password for remoteuser: 
Connection to $REMOTEPC closed.

sudo -v各ファイルの後に実行する必要があることに注意してください/etc/sudoers.d/。そのため、変更は受け入れられます。


0

別の方法は、リモートマシンでrsyncを開始することにより、アクセス許可の制限を回避することです。の代わりに:

rsync /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder

できるよ:

ssh ubuntu@x.x.x.x 'rsync ubuntu@y.y.y.y:/home/ubuntu/my/lovely/folder /remote/lovely/folder'

y.y.y.yローカルマシンのIPアドレスはどこですか。これは、ローカルマシンがSSHサーバーとして機能できる場合にのみ機能します。


1
うーん...あなたは最初のコマンドラインでローカルからリモートにコピーしていませんか?そして、最初のコマンドラインと同じであるはずの2番目のコマンドラインで、リモートからローカルにコピーしています(最初のものと同等ではありません)?
sdaau

おっと!それを修正しました。
キース

0

私の回避策は追加することです --rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"

例:

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"

通常、コマンドラインのワンライナーにパスワードを入れるのは良い考えではありません。たとえば、プロセスツリーに表示されます。私は時々、このタイプのステートメントの実際のパスワードを$(cat my_password.txt)に置き換えます。

rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"


少しのコンテキストと説明でこれを拡張できますか?何に、どこに「追加」しますか?なぜこれが問題を解決するのですか?ありがとう。
fixer1234
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.