#!/usr/bin/env bash set -eu synopsis() { cat << EOF Usage : `basename $0` [-h] [option...] [login@]system:[path] mountpoint EOF } help() { cat << EOF `basename $0` monte un répertoire du système virtuel dans un répertoire de l'hôte. Remarque : nécessite fuse et sshfs. `synopsis` -h : affiche cette aide Les options autorisées sont celles de sshfs(1). Exemple : mkdir /tmp/d vdn-sshfs test@vm-1: /tmp/d # le HOME de test sur vm-1 est monté dans /tmp/d # Pour démonter fusermount -u /tmp/d EOF } usage() { synopsis exit 1 } args() { OPTS="" while [ $# -ne 0 ]; do reg='^-' if [[ "$1" =~ $reg ]]; then OPTS="$OPTS $1" case "$1" in -h) help; exit 0;; -b|-c|-D|-e|-F|-I|-i|-L|-l|-m|-O|-o|-p|-R|-S|-w) OPTS="$OPTS $2"; shift;; esac shift else break fi done LOGIN="" DIR="" GUEST_NAME="$1" if echo $1 | grep -q -- '@'; then LOGIN=`echo $1 | cut -d '@' -f 1`@ GUEST_NAME=`echo $1 | cut -d '@' -f 2` if ! echo $GUEST_NAME | grep -q -- ':'; then usage fi DIR=$(echo $GUEST_NAME | cut -d ':' -f 2) GUEST_NAME=$(echo $GUEST_NAME | cut -d ':' -f 1) fi shift set +u MOUNT_DIR="$1" [ -z "$MOUNT_DIR" -o -n "$2" ] && usage set -u } # Programme principal GUEST_OWNER=$USER VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh args "$@" #if [ $GUEST_NAME = nested ]; then # SSH_REDIR_PORT=2222 #else [ ! -e $TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-redirs ] && error "Impossible de joindre $GUEST_NAME" SSH_REDIR_PORT=`cat $TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-redirs | \ sed -rne 's/^tcp:([0-9]+):22(:|$).*$/\1/p'` [ -z "$SSH_REDIR_PORT" ] && error "Impossible de joindre $GUEST_NAME" #fi # No master mode when X11 forwarding echo $OPTS | grep -q -- -X && { #echo "Workaround X11 forwarding" >&2 SSH_GUEST_MASTER=0 } SSH_MASTER="" [ $SSH_GUEST_MASTER = 1 ] && { sshGuestControlMaster SSH_MASTER="$SSH_OPTS -o ControlPersist=10m -o ControlMaster=auto,ControlPath=$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-guest-%r@%h:%p" } set +e #ssh $SSH_MASTER $SSH_OPTS -o ServerAliveInterval=5 $OPTS -p $SSH_REDIR_PORT ${LOGIN}localhost "$COMMAND" sshfs ${LOGIN}localhost:$DIR $MOUNT_DIR $SSH_MASTER $SSH_OPTS -o ServerAliveInterval=5 $OPTS -p $SSH_REDIR_PORT