You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.1 KiB
116 lines
2.1 KiB
#!/usr/bin/env bash
|
|
|
|
set -eu
|
|
|
|
synopsis() {
|
|
cat << EOF
|
|
Usage : `basename $0` [-h] [option...] src dst
|
|
EOF
|
|
}
|
|
|
|
help() {
|
|
cat << EOF
|
|
|
|
`basename $0` effectue un scp à partir ou à destination d'un système virtuel.
|
|
|
|
`synopsis`
|
|
|
|
-h : affiche cette aide
|
|
|
|
Les options autorisées sont celles de scp(1).
|
|
|
|
Exemple :
|
|
|
|
# Copie de l'hôte vers la machine virtuelle
|
|
# /etc/passwd de l'hôte vers /tmp de la machine virtuelle
|
|
|
|
vdn-scp /etc/passwd test@vm-1:/tmp
|
|
|
|
# Copie de la machine virtuelle vers l'hôte
|
|
# /etc/passwd de la machine virtuelle vers /tmp de l'hôte
|
|
|
|
vdn-scp test@vm-1:/etc/passwd /tmp
|
|
|
|
EOF
|
|
}
|
|
|
|
usage() {
|
|
synopsis
|
|
exit 1
|
|
}
|
|
|
|
args() {
|
|
opts=""
|
|
|
|
[ $# -eq 1 -a "$1" = "-h" ] && { help; exit 0; }
|
|
|
|
while [ $# -gt 2 ]; do
|
|
if [ "$1" = "-h" ]; then help; exit 0; fi
|
|
opts="$opts $1"
|
|
shift
|
|
done
|
|
|
|
LOGIN="${USER}@"
|
|
GUEST_NAME=""
|
|
|
|
for i in 1 2; do
|
|
reg=':'
|
|
if [[ "$1" =~ "$reg" ]]; then
|
|
user=`echo $1 | cut -d ':' -f 1`
|
|
path=`echo $1 | cut -d ':' -f 2`
|
|
LOGIN="${USER}@"
|
|
GUEST_NAME="$user"
|
|
reg="@"
|
|
if [[ "$user" =~ "$reg" ]]; then
|
|
LOGIN=`echo $user | cut -d '@' -f 1`@
|
|
GUEST_NAME=`echo $user | cut -d '@' -f 2`
|
|
fi
|
|
path="${LOGIN}localhost:$path"
|
|
else
|
|
path="$1"
|
|
fi
|
|
|
|
[ $i -eq 1 ] && src="$path" || dst="$path"
|
|
|
|
shift
|
|
done
|
|
|
|
#echo "opts=$opts src=$src dst=$dst GUEST_NAME=$GUEST_NAME"
|
|
|
|
}
|
|
|
|
|
|
# Programme principal
|
|
|
|
GUEST_OWNER=$USER
|
|
|
|
VDN_PATH=$(readlink -f $(dirname $0)/..); . $VDN_PATH/bin/functions.sh
|
|
|
|
args "$@"
|
|
|
|
[ -z "$GUEST_NAME" ] && usage
|
|
|
|
#setGuestVars $GUEST_NAME
|
|
#loadGuestVars $GUEST_NAME
|
|
|
|
[ ! -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"
|
|
|
|
if [ -z "$SSH_REDIR_PORT" ]; then
|
|
error "Aucune redirection vers le port 22 du système $GUEST_NAME !"
|
|
exit 1
|
|
fi
|
|
|
|
SSH_MASTER=""
|
|
[ $SSH_GUEST_MASTER = 1 ] && {
|
|
sshGuestControlMaster
|
|
SSH_MASTER="-o ControlPath=$TMPDIR/vdn-$GUEST_NAME-$GUEST_OWNER-guest-%r@%h:%p"
|
|
}
|
|
|
|
scp $SSH_MASTER $SCP_OPTS $opts -P $SSH_REDIR_PORT $src $dst
|