ファイルシステムを複製したいstorage/photos
ルートとしてsshログインを有効にせずにsource
からdestination
に。次のようなさまざまな組み合わせを試しました。
Sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | ssh example.com Sudo zfs recieve storage/photos
Sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | ssh example.com su -c zfs recieve storage/photos
Sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | ssh example.com 'Sudo -S zfs recieve storage/photos <~/topsecret'
Zfsストリームはすでに標準入力に接続されているため、Sudo-Sを使用してパスワードを渡すことはできません。そして、stdinではなくインタラクティブ端末を期待する上記の2つの例。
おそらく、サーバーでrootログインを有効にしたくないのはばかげています。しかし、ブルートフォース攻撃者がどちらがニースであるかを推測するためのもう1つのことが残されています。
これはrootログインを完全に削除するわけではありませんが、フル機能のログイン以外のことを保護します。
ローカルユーザーの公開鍵(通常は~/.ssh/id_rsa.pub
)authorized_keysファイル(~/.ssh/authorized_keys
)リモートユーザーの場合。これにより、パスワードプロンプトが排除され、SSHキーのブルートフォースが困難になるため、セキュリティが向上します。おそらく、sshd_config
はPermitRootLogin without-password
-これにより、リモートルートログインがSSHキーのみに制限されます(正しいパスワードでも失敗します)。
次に、authorized_keysファイルのForceCommand
ディレクティブを使用してセキュリティを追加し、zfsコマンドのみの実行を許可できます。
私は今日早く同じ問題に遭遇しました。 「zfsallow」コマンドを使用して、通常のユーザーに特定の操作を実行することを許可できることがわかりました。
rootとして、サーバーで次の手順を実行します。zfsallow your_username receive、create、mount storage/photos
その後、your_usernameを使用してサーバーにSSHで接続できるようになり、受け取るzfs権限が付与されます。ここを参照してください: http://docs.Oracle.com/cd/E19253-01/819-5461/gfkco/index.html
まだ0.7.0にアップグレードしていない人のために、私が思いついた解決策を次に示します。リモートサーバーにSSHで接続し、以下を実行します。
mkfifo zfs-pipe
# It doesn't ask for your password until the pipe starts to receive
# data. So check back here when you start the local command
Sudo zfs receive storage/photos < zfs-pipe
次にローカルで:
Sudo zfs send -R storage/photos@frequent_2015-02-12_18:15 | \
pv | ssh example.com "cat - > zfs-pipe"
もちろん、pv
はオプションです。進捗状況を監視するものがあるのはいいことです
最後に、パイプをクリーンアップします。
rm zfs-pipe
@ analog900は正しい方向に進んでいます。
Rootログインの必要性を回避するなど、セキュリティを強化するための1つの鍵は、ZFSの組み込みのアクセス許可構造を使用することと、バックアップ転送を逆に構造化することです 'ラウンドとpullバックアップをプッシュするのではなく、ネットワーク経由で。ルートアクセスなしでファイルシステムをバックアップする機能は、ZFSファイルシステムの主要な設計上の成果の1つです。
destination
でジョブを実行し、source
からデータをプルします。おそらく次のようになります。
foo
を作成し、zfs allow
を使用してそのアカウントに次の機能を付与します。スナップショットの作成と送信: zfs allow foo mount,snapshot,send storage/photos
bar
を作成し、そのアカウントにファイルシステムを受信/作成/マウントする機能を与えます。 zfs allow bar mount,create,receive storage/photos
bar
として、バックアップジョブ専用のsshキーを作成します。そのキーのパブリック半分を、ソースマシンのユーザーfoo
の.ssh
ディレクトリにインストールします。これにより、ユーザーはbar@destination
アカウントへのfoo@source
セキュアsshログインアクセスが可能になります。また、destination
の〜bar/.ssh/configファイルを編集して、正しいSSHキーファイル名(前に作成したもの)とユーザー名を自動的に使用するようにします。 Host source
Hostname FQDN.of.source.example.com
User foo
IdentityFile ~bar/.ssh/backup_key_id_rsa
bar@destination
からバックアップジョブを実行します。 dt=$(date +%Y-%m-%d_%H:%M:%S)
ssh source "zfs snap storage/photos@frequent_$dt"
ssh source "zfs send -R storage/photos@frequent_$dt" | zfs receive storage/photos
この方法でそれを行うには、noルートアクセスが必要です。