web-dev-qa-db-ja.com

rsyncをdaemon-over-sshモードで動作させることができません

サーバーから毎日データをコピーするようにrsyncを設定しようとしています。システムをできるだけ制限するために、次のようにマニュアルページで説明されているモードを使用しようとしています。「RSYNC-DAEMON機能の使用VIAリモートシェル接続」

そこで、ルートのホームフォルダにrsyncd.confというファイルを配置しました。

[root]
path = /
read only = true

テストとして/ etc/passwdをコピーしようとしました:

rsync -vv -e ssh myserver::root/etc/passwd .

しかし、私は以下を得ます:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

私がこれをすべて行っている理由は、それが機能するようになったら、コマンドを指定してアクセスを制限する予定だからです。

rsync --server --daemon .

〜/ .ssh/authorized_keys

11
rjmunro

ドキュメントまたはrsyncの実装にバグがあるようです。 man rsyncさんのコメント:

Rsyncは、リモートシェルを使用してホストに接続し、リモートユーザーのhome dirにある構成ファイルを読み取ることを期待する使い捨ての「デーモン」サーバーの起動をサポートしています。

しかし、/ var/log/messagesによると、ルートに接続すると、/ etc/rsyncd.confで設定ファイル(SSHを介して使用されない場合のrsyncd.confファイルの標準の場所)を探していました。

次のように追加して、sshサーバーに正しい構成ファイルを使用するように強制する必要がありました。

command="rsync --config=/root/rsyncd.conf --server --daemon ."

/root/.ssh/authorized_keysに。

構成をデフォルトの場所に配置しなかったのは、誰かに誤って通常のrsyncデーモンを起動させたくなかったからです。正しいsshキーを取得したときに、デーモンにこれだけのアクセスを許可したいだけです。

11
rjmunro

デーモンモードでのrsyncは、可能な限り厳しくロックしたい場合に提案するものではありません。 SSHキーで実行できるコマンドを制限し、そのキーを使用してcopyコマンドを呼び出す必要があります。

キーを制限するコマンドを見つけるには、sshコマンドを少し変更して、適切なrsyncコマンドラインを実行します。

rsync -avz -e 'ssh -v' stuff somewhere:/place

デバッグ出力に次のような行が表示されます。

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

その正確なコマンドは、.ssh/authorized_keysで実行できるようにキーを制限するものです。

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=
5
MikeyB