ajouter les options --parse, --exec, --no-exec
This commit is contained in:
parent
167d7195d9
commit
2c060670c4
96
ussh
96
ussh
|
@ -10,6 +10,7 @@ USAGE
|
||||||
$scriptname [options] hosts
|
$scriptname [options] hosts
|
||||||
$scriptname [options] @hostsfile
|
$scriptname [options] @hostsfile
|
||||||
$scriptname -r hosts
|
$scriptname -r hosts
|
||||||
|
$scriptname --parse hosts
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
hosts
|
hosts
|
||||||
|
@ -52,7 +53,19 @@ Les options suivantes sont exclusives à ce script:
|
||||||
Quand cette option est spécifié, l'option -j est reconnue et permet de
|
Quand cette option est spécifié, l'option -j est reconnue et permet de
|
||||||
NE PAS se reconnecter à l'hôte juste après avoir nettoyé les clés. Avec
|
NE PAS se reconnecter à l'hôte juste après avoir nettoyé les clés. Avec
|
||||||
l'option -j, TOUS les arguments sont des noms d'hôte puisqu'aucune
|
l'option -j, TOUS les arguments sont des noms d'hôte puisqu'aucune
|
||||||
connexion n'est effectuée."
|
connexion n'est effectuée.
|
||||||
|
--exec
|
||||||
|
--no-exec
|
||||||
|
Avec --exec, si un seul hôte est spécifié, lancer le processus ssh avec
|
||||||
|
exec, pour éviter d'encombrer la mémoire. C'est l'option par défaut.
|
||||||
|
Avec --no-exec, ne jamais utiliser exec pour lancer ssh.
|
||||||
|
--parse
|
||||||
|
Afficher la définition des variables ssh, options, hosts et args qui
|
||||||
|
permettent d'effectuer la connexion à partir d'un autre script. Exemple:
|
||||||
|
"'eval "$(ussh --parse args...)"
|
||||||
|
for host in "${hosts[@]}"; do
|
||||||
|
"$ssh" "${options[@]}" "$host" "${args[@]}"
|
||||||
|
done'""
|
||||||
}
|
}
|
||||||
|
|
||||||
__PARSED_HOSTS=()
|
__PARSED_HOSTS=()
|
||||||
|
@ -91,7 +104,21 @@ function __expand_braces() {
|
||||||
echo "$1"
|
echo "$1"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
function __dot_is_localhost() { [ "$1" == "." ] && echo "localhost." || echo "$1"; }
|
function __dot_is_localhost() { [ "$1" == "." ] && echo "localhost" || echo "$1"; }
|
||||||
|
function __fix_domain() {
|
||||||
|
local user host
|
||||||
|
splituserhost "$1" user host
|
||||||
|
if [ "$host" == localhost ]; then
|
||||||
|
: # ne pas corriger localhost
|
||||||
|
elif [ "${host%.}" != "$host" ]; then
|
||||||
|
# si le nom se termine par ., le prendre tel quel
|
||||||
|
host="${host%.}"
|
||||||
|
elif ! [[ "$host" == *.* ]]; then
|
||||||
|
# sinon rajouter le domaine par défaut le cas échéant
|
||||||
|
host="$host${DOMAIN:+.$DOMAIN}"
|
||||||
|
fi
|
||||||
|
echo "${user:+$user@}$host"
|
||||||
|
}
|
||||||
function fix_hosts() {
|
function fix_hosts() {
|
||||||
# Si hosts contient des éléments multiple, comme a:b, séparer ces
|
# Si hosts contient des éléments multiple, comme a:b, séparer ces
|
||||||
# éléments. i.e (a b:c "d e") --> (a b c d e)
|
# éléments. i.e (a b:c "d e") --> (a b c d e)
|
||||||
|
@ -114,8 +141,9 @@ function fix_hosts() {
|
||||||
array_addu _hosts "$host"
|
array_addu _hosts "$host"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
array_map _hosts __dot_is_localhost
|
||||||
|
array_map _hosts __fix_domain
|
||||||
array_copy hosts _hosts
|
array_copy hosts _hosts
|
||||||
array_map hosts __dot_is_localhost
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function remove_key() {
|
function remove_key() {
|
||||||
|
@ -126,22 +154,12 @@ function remove_keys() {
|
||||||
urequire ipcalc
|
urequire ipcalc
|
||||||
|
|
||||||
local -a __hosts; array_copy __hosts hosts
|
local -a __hosts; array_copy __hosts hosts
|
||||||
local -a allhosts hosts ips; local host user ip
|
local -a allhosts hosts ips; local host hostname user ip
|
||||||
array_copy allhosts __hosts
|
array_copy allhosts __hosts
|
||||||
|
|
||||||
etitle "Suppression des entrées dans ~/.ssh/known_hosts"
|
etitle "Suppression des entrées dans ~/.ssh/known_hosts"
|
||||||
for host in "${allhosts[@]}"; do
|
for host in "${allhosts[@]}"; do
|
||||||
splituserhost "$host" user host
|
splituserhost "$host" user host
|
||||||
if [ "$host" == localhost ]; then
|
|
||||||
: # ne pas corriger localhost
|
|
||||||
elif [ "${host%.}" != "$host" ]; then
|
|
||||||
# si le nom se termine par ., le prendre tel quel
|
|
||||||
host="${host%.}"
|
|
||||||
elif ! [[ "$host" == *.* ]]; then
|
|
||||||
# sinon rajouter le domaine par défaut le cas échéant
|
|
||||||
host="$host${DOMAIN:+.$DOMAIN}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ipcalc_checkip "$host" >/dev/null; then
|
if ipcalc_checkip "$host" >/dev/null; then
|
||||||
ip="$host"
|
ip="$host"
|
||||||
remove_key "$ip"
|
remove_key "$ip"
|
||||||
|
@ -166,25 +184,25 @@ function remove_keys() {
|
||||||
eend
|
eend
|
||||||
}
|
}
|
||||||
|
|
||||||
function do_ssh() {
|
function show_vars() {
|
||||||
local r
|
set_var_cmd ssh "$SSH"
|
||||||
[ -n "$SSH" ] || SSH=ssh
|
set_array_cmd options SSHOPTS
|
||||||
[ "${#hosts[*]}" -gt 1 ] && showtitle=1 || showtitle=
|
set_array_cmd hosts
|
||||||
for host in "${hosts[@]}"; do
|
set_array_cmd args @ "$@"
|
||||||
splituserhost "$host" user host
|
}
|
||||||
if [ "$host" == localhost ]; then
|
|
||||||
: # ne pas corriger localhost
|
|
||||||
elif [ "${host%.}" != "$host" ]; then
|
|
||||||
# si le nom se termine par ., le prendre tel quel
|
|
||||||
host="${host%.}"
|
|
||||||
elif ! [[ "$host" == *.* ]]; then
|
|
||||||
# sinon rajouter le domaine par défaut le cas échéant
|
|
||||||
host="$host${DOMAIN:+.$DOMAIN}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -n "$showtitle" ] && etitle "${user:+$user@}$host"
|
function do_ssh() {
|
||||||
"$SSH" "${SSHOPTS[@]}" "${user:+$user@}$host" "$@" || r=$?
|
local onehost r
|
||||||
[ -n "$showtitle" ] && eend
|
if [ "${#hosts[*]}" -gt 1 ]; then
|
||||||
|
onehost=
|
||||||
|
exec=
|
||||||
|
else
|
||||||
|
onehost=1
|
||||||
|
fi
|
||||||
|
for host in "${hosts[@]}"; do
|
||||||
|
[ -z "$onehost" ] && etitle "$host"
|
||||||
|
${exec:+exec} "$SSH" "${SSHOPTS[@]}" "$host" "$@" || r=$?
|
||||||
|
[ -z "$onehost" ] && eend
|
||||||
done
|
done
|
||||||
return "${r:-0}"
|
return "${r:-0}"
|
||||||
}
|
}
|
||||||
|
@ -197,6 +215,8 @@ DOMAIN="$USSH_DOMAIN"
|
||||||
SSH=
|
SSH=
|
||||||
remove=
|
remove=
|
||||||
remove_only=
|
remove_only=
|
||||||
|
exec=1
|
||||||
|
parse=
|
||||||
parse_opts "${PRETTYOPTS[@]}" \
|
parse_opts "${PRETTYOPTS[@]}" \
|
||||||
--help '$exit_with display_help' \
|
--help '$exit_with display_help' \
|
||||||
-1,-2,-4,-6,-A,-a,-C,-f,-g,-K,-k,-M,-N,-n,-q,-s,-T,-t,-V,-v,-X,-x,-Y,-y '$sshopt "$option_"' \
|
-1,-2,-4,-6,-A,-a,-C,-f,-g,-K,-k,-M,-N,-n,-q,-s,-T,-t,-V,-v,-X,-x,-Y,-y '$sshopt "$option_"' \
|
||||||
|
@ -207,8 +227,11 @@ parse_opts "${PRETTYOPTS[@]}" \
|
||||||
--port: '$sshopt -p "$value_"' \
|
--port: '$sshopt -p "$value_"' \
|
||||||
-d:,--domain: DOMAIN= \
|
-d:,--domain: DOMAIN= \
|
||||||
-z:,--ssh: SSH= \
|
-z:,--ssh: SSH= \
|
||||||
-r,--remove remove=1 \
|
-r,--remove '$remove=1; parse=' \
|
||||||
-j remove_only=1 \
|
-j remove_only=1 \
|
||||||
|
--exec exec=1 \
|
||||||
|
--no-exec exec= \
|
||||||
|
--parse '$parse=1; remove=' \
|
||||||
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
@ args -- "$@" && set -- "${args[@]}" || die "$args"
|
||||||
|
|
||||||
if [ -n "$remove" ]; then
|
if [ -n "$remove" ]; then
|
||||||
|
@ -228,4 +251,9 @@ else
|
||||||
fix_hosts
|
fix_hosts
|
||||||
fi
|
fi
|
||||||
|
|
||||||
do_ssh "$@"
|
[ -n "$SSH" ] || SSH=ssh
|
||||||
|
if [ -n "$parse" ]; then
|
||||||
|
show_vars "$@"
|
||||||
|
else
|
||||||
|
do_ssh "$@"
|
||||||
|
fi
|
||||||
|
|
Loading…
Reference in New Issue