Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #
- # rsyncによる簡易バックアップスクリプト(サーバ側)
- # by Shigeru KANEMOTO
- # Public Domain
- #
- # /etc/passwd
- # backup:x:0:0:Backup Superuser:/root/backup:/root/backup/shell
- #
- # authorized_keysファイルでは、以下のように指定する。
- # commandオプションに、バックアップ元の名称を指定する。この名前でディレクトリが作成される。
- # command="sgk-HD160G",no-pty,no-port-forwarding ssh-rsa AAAAB3Nz...
- #
- # その他、sshd_configにはセキュリティ関係の設定が必要。
- # PAMをやめるとか。
- #
- # Config
- RSYNC_CMD="/usr/bin/rsync"
- DF_CMD="/bin/df"
- BACKUP_TOPDIR="/backup" # バックアップ保存領域のトップ。この下にバックアップ元毎にディレクトリが作成される。
- # Startup
- me="$0@`hostname`"
- # Check
- if [ "$#" != 2 -o "$1" != "-c" ]; then
- echo "$me: set 'command=\"source-label\"' in the 'authorized_keys' file."
- exit 1
- fi
- src="$2"
- target="$BACKUP_TOPDIR/$src"
- if [ ! -d "$target" ]; then
- echo "$me: Directory '$target' does not exist."
- exit 2
- fi
- if [ -z "$SSH_ORIGINAL_COMMAND" ]; then
- echo "$me: set 'command=\"source label\"' in the 'authorized_keys' file."
- exit 3
- fi
- set $SSH_ORIGINAL_COMMAND
- # Main
- case "$1" in
- rsync)
- if [ "$2" = "--server" ]; then
- shift
- # オプションだけをコピーする。
- while [ "$#" -gt 0 ]; do
- if expr -- "$1" : '[^-]' > /dev/null; then
- break
- fi
- av=(${av[*]} "$1")
- shift
- done
- shift
- dir=$(echo "$1" | sed -e 's,\.\.,,g')
- nice "$RSYNC_CMD" ${av[*]} . "$target/$dir"
- touch "$target/$dir"
- fi
- ;;
- df)
- "$DF_CMD" "$target"
- ;;
- *)
- echo "$me: $1: command not found"
- exit 4
- ;;
- esac
Add Comment
Please, Sign In to add comment