diff options
Diffstat (limited to 'rsyncd-scp.sh')
-rwxr-xr-x | rsyncd-scp.sh | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/rsyncd-scp.sh b/rsyncd-scp.sh new file mode 100755 index 0000000..de54a8e --- /dev/null +++ b/rsyncd-scp.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +host=${1%%:*} +path=${1#*:} +dst=$2 + +if [[ -z $1 || -z $2 ]]; then + echo "${0%%*/}: <host:src> <dst>" + exit 0 +fi + +while :; do + port=$RANDOM + [[ $port -gt 1024 && $port -lt 65535 ]] && break +done + +rm_tmpdir=$(ssh $host 'mktemp -d /tmp/rsyncd-scp.XXXXXX') + +cleanup() { + ssh $host "kill \`<'$rm_tmpdir/pid'\`" &>/dev/null || true + ssh $host "rm -rf $rm_tmpdir" +} + +trap cleanup EXIT INT TERM + +ssh $host 'cat <<EOF >'"$rm_tmpdir"'/rsyncd.conf +max connections = 1 +pid file = '"$rm_tmpdir"'/pid +lock file = '"$rm_tmpdir"'/lock +use chroot = no +log file = /dev/null +port = '$port' +[share] + path = '"$path"' +EOF +rsync --daemon --config='"$rm_tmpdir"'/rsyncd.conf; +' + +rsync --progress --port $port "rsync://$host/share/" -rt "$dst" + |