QA@IT
«回答へ戻る

回答を投稿

様々な方法があると思いますが、authorized_keys の設定にて実行できるコマンドと接続元を制限する場合、下記の方法でできると思います。

rootアカウント用のssh設定を行う(必要な場合のみ)

ログインすると強制的に特定のコマンドが実行される場合にのみ root のログインを許可するよう /etc/ssh/sshd_config に下記設定を行う

#PermitRootLogin no
PermitRootLogin forced-commands-only

rsync用の鍵を作成する

ssh-keygen -t dsa -N "" -f /path/to/.ssh/rsync

バックアップ先のrsyncを実行するコマンドを調べる

rsync-vv オプションをつけて実行し、実際にリモートサーバで実行されるコマンドを調べる。

rsync -vv -az -e "ssh -i /path/to/.ssh/rsync" /path/to/backup/ hoge@remote.example.com:/path/to/backup/
opening connection using: ssh -i /path/to/.ssh/rsync -l hoge remote.example.com rsync --server -vvlogDtprze.iLsf . /path/to/backup/
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]

上記のような結果の場合は rsync --server -vvlogDtprze.iLsf . /path/to/backup/ を使う

リモートサーバの authorized_keys に設定追加する

鍵の情報を設定するとともに、commandに -vv オプションで調べたものを -vv をはずして指定し、fromには接続元を記述して、指定したホストからのみ接続するように設定

command="rsync --server -logDtprze.iLsf . /path/to/backup/",from="local.example.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAA...

cronに設定する

crontab -e
0 0 * * * rsync -az -e "ssh -i /path/to/.ssh/rsync" /path/to/backup/ hoge@remote.example.com:/path/to/backup/
様々な方法があると思いますが、authorized_keys の設定にて実行できるコマンドと接続元を制限する場合、下記の方法でできると思います。

### rootアカウント用のssh設定を行う(必要な場合のみ)
ログインすると強制的に特定のコマンドが実行される場合にのみ root のログインを許可するよう /etc/ssh/sshd_config に下記設定を行う

```sh
#PermitRootLogin no
PermitRootLogin forced-commands-only
```

### rsync用の鍵を作成する

```sh
ssh-keygen -t dsa -N "" -f /path/to/.ssh/rsync
```

### バックアップ先のrsyncを実行するコマンドを調べる

`rsync` に `-vv` オプションをつけて実行し、実際にリモートサーバで実行されるコマンドを調べる。

```sh
rsync -vv -az -e "ssh -i /path/to/.ssh/rsync" /path/to/backup/ hoge@remote.example.com:/path/to/backup/
```

```
opening connection using: ssh -i /path/to/.ssh/rsync -l hoge remote.example.com rsync --server -vvlogDtprze.iLsf . /path/to/backup/
Permission denied (publickey).
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(605) [sender=3.0.9]
```

上記のような結果の場合は `rsync --server -vvlogDtprze.iLsf . /path/to/backup/` を使う

### リモートサーバの authorized_keys に設定追加する

鍵の情報を設定するとともに、commandに `-vv` オプションで調べたものを `-vv` をはずして指定し、fromには接続元を記述して、指定したホストからのみ接続するように設定

```sh
command="rsync --server -logDtprze.iLsf . /path/to/backup/",from="local.example.com",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAA...
```

### cronに設定する

```sh
crontab -e
```

```
0 0 * * * rsync -az -e "ssh -i /path/to/.ssh/rsync" /path/to/backup/ hoge@remote.example.com:/path/to/backup/
```