Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.93 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. usage()
  4. {
  5. cat <<HELP
  6. Usage: $0 -uaifrpd
  7.  
  8. options:
  9.     -u - User for forward server connection (*optional)
  10.     -a - User for remote server connection (default: equal to -u option)
  11.     -i - Path to identity file (*optional)
  12.     -f - host of a forward server (example: nat.server.com)
  13.     -r - host of a remote server (example: 10.0.1.0)
  14.     -p - port of a remote server (default: 22)
  15.     -d - rsync destination on a server (*optional, example: "~/some_dir_in_home")
  16.  
  17. Examples:
  18.     $0 -f 54.77.123.123 -r 10.0.1.20 -u ec2-user -a ubuntu -i some_key.pem
  19.     $0 -f 54.77.123.123 -r 10.0.1.20 -d "~/provision"
  20. HELP
  21.     exit 1
  22. }
  23.  
  24. error_log()
  25. {
  26.     echo ***ERROR*** $1
  27.     usage
  28. }
  29.  
  30. load_local_port()
  31. {
  32.     for port in $(seq 10000 20000); do
  33.         echo -ne "\035" | telnet 127.0.0.1 $port > /dev/null 2>&1; [ $? -eq 1 ] && LOCAL_PORT=$port && break
  34.     done
  35. }
  36.  
  37. while getopts ":u:a:i:f:r:p:d:" optname
  38.     do
  39.         case "$optname" in
  40.             "u")
  41.                 USER=$OPTARG
  42.                 ;;
  43.             "a")
  44.                 REMOTE_USER=$OPTARG
  45.                 ;;
  46.             "i")
  47.                 PRIVATE_KEY=$OPTARG
  48.                 ;;
  49.             "f")
  50.                 FORWARD_SERVER=$OPTARG
  51.                 ;;
  52.             "r")
  53.                 REMOTE_SERVER=$OPTARG
  54.                 ;;
  55.             "p")
  56.                 REMOTE_PORT=$OPTARG
  57.                 ;;
  58.             "d")
  59.                 RSYNC_TARGET=$OPTARG
  60.                 ;;
  61.             "?")
  62.                 error_log "Unknown option $OPTARG"
  63.                 ;;
  64.             ":")
  65.                 error_log "No argument value for option $OPTARG"
  66.                 ;;
  67.             *)
  68.                 error_log "Unknown error while processing options"
  69.                 ;;
  70.         esac
  71.     done
  72.  
  73. if [ -z $FORWARD_SERVER ]; then
  74.     error_log "Please, specify a forward server"
  75. fi
  76.  
  77. if [ -z $REMOTE_SERVER ]; then
  78.     error_log "Please, specify a remote server"
  79. fi
  80.  
  81. if [ -z $REMOTE_PORT ]; then
  82.     REMOTE_PORT=22
  83. fi
  84.  
  85. SSH_OPTS="-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null"
  86.  
  87. if [ ! -z $PRIVATE_KEY ]; then
  88.     SSH_OPTS="$SSH_OPTS -i $PRIVATE_KEY"
  89. fi
  90.  
  91. if [ -z $REMOTE_USER ]; then
  92.     REMOTE_USER=$USER
  93. fi
  94.  
  95. load_local_port
  96.  
  97. echo Creating a tunnel with local port $LOCAL_PORT...
  98.  
  99. ssh $SSH_OPTS -l $REMOTE_USER -N -L $LOCAL_PORT:$REMOTE_SERVER:$REMOTE_PORT $USER@$FORWARD_SERVER &
  100.  
  101. TUNNEL_PID=$!
  102. IS_OPEN=$?
  103.  
  104. if [ $IS_OPEN -ne 0 ]; then
  105.     error_log "The tunnel is cannot be established"
  106. fi
  107.  
  108. echo Connecting...
  109. sleep 1
  110.  
  111. if [ -z "$RSYNC_TARGET" ]; then
  112.     ssh $SSH_OPTS -p $LOCAL_PORT $REMOTE_USER@localhost
  113. else
  114.     rsync -rlvztp --delete \
  115.         -e "ssh $SSH_OPTS -p $LOCAL_PORT" \
  116.         --exclude=".git" \
  117.         --exclude="nbproject" \
  118.         --exclude="/cache" \
  119.         * $REMOTE_USER@localhost:$RSYNC_TARGET
  120. fi
  121.  
  122. read -p "Press ENTER to exit..."
  123.  
  124. echo Terminating $TUNNEL_PID...
  125. kill $TUNNEL_PID
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement