Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- usage()
- {
- cat <<HELP
- Usage: $0 -uaifrpd
- options:
- -u - User for forward server connection (*optional)
- -a - User for remote server connection (default: equal to -u option)
- -i - Path to identity file (*optional)
- -f - host of a forward server (example: nat.server.com)
- -r - host of a remote server (example: 10.0.1.0)
- -p - port of a remote server (default: 22)
- -d - rsync destination on a server (*optional, example: "~/some_dir_in_home")
- Examples:
- $0 -f 54.77.123.123 -r 10.0.1.20 -u ec2-user -a ubuntu -i some_key.pem
- $0 -f 54.77.123.123 -r 10.0.1.20 -d "~/provision"
- HELP
- exit 1
- }
- error_log()
- {
- echo ***ERROR*** $1
- usage
- }
- load_local_port()
- {
- for port in $(seq 10000 20000); do
- echo -ne "\035" | telnet 127.0.0.1 $port > /dev/null 2>&1; [ $? -eq 1 ] && LOCAL_PORT=$port && break
- done
- }
- while getopts ":u:a:i:f:r:p:d:" optname
- do
- case "$optname" in
- "u")
- USER=$OPTARG
- ;;
- "a")
- REMOTE_USER=$OPTARG
- ;;
- "i")
- PRIVATE_KEY=$OPTARG
- ;;
- "f")
- FORWARD_SERVER=$OPTARG
- ;;
- "r")
- REMOTE_SERVER=$OPTARG
- ;;
- "p")
- REMOTE_PORT=$OPTARG
- ;;
- "d")
- RSYNC_TARGET=$OPTARG
- ;;
- "?")
- error_log "Unknown option $OPTARG"
- ;;
- ":")
- error_log "No argument value for option $OPTARG"
- ;;
- *)
- error_log "Unknown error while processing options"
- ;;
- esac
- done
- if [ -z $FORWARD_SERVER ]; then
- error_log "Please, specify a forward server"
- fi
- if [ -z $REMOTE_SERVER ]; then
- error_log "Please, specify a remote server"
- fi
- if [ -z $REMOTE_PORT ]; then
- REMOTE_PORT=22
- fi
- SSH_OPTS="-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null"
- if [ ! -z $PRIVATE_KEY ]; then
- SSH_OPTS="$SSH_OPTS -i $PRIVATE_KEY"
- fi
- if [ -z $REMOTE_USER ]; then
- REMOTE_USER=$USER
- fi
- load_local_port
- echo Creating a tunnel with local port $LOCAL_PORT...
- ssh $SSH_OPTS -l $REMOTE_USER -N -L $LOCAL_PORT:$REMOTE_SERVER:$REMOTE_PORT $USER@$FORWARD_SERVER &
- TUNNEL_PID=$!
- IS_OPEN=$?
- if [ $IS_OPEN -ne 0 ]; then
- error_log "The tunnel is cannot be established"
- fi
- echo Connecting...
- sleep 1
- if [ -z "$RSYNC_TARGET" ]; then
- ssh $SSH_OPTS -p $LOCAL_PORT $REMOTE_USER@localhost
- else
- rsync -rlvztp --delete \
- -e "ssh $SSH_OPTS -p $LOCAL_PORT" \
- --exclude=".git" \
- --exclude="nbproject" \
- --exclude="/cache" \
- * $REMOTE_USER@localhost:$RSYNC_TARGET
- fi
- read -p "Press ENTER to exit..."
- echo Terminating $TUNNEL_PID...
- kill $TUNNEL_PID
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement