ussh: bug dans l'analyse des arguments
This commit is contained in:
parent
9992505504
commit
f4537af09f
99
ussh
99
ussh
|
@ -194,9 +194,9 @@ function remove_keys() {
|
||||||
eend
|
eend
|
||||||
}
|
}
|
||||||
|
|
||||||
function __parse_ssh_config() {
|
function __parse_ssh_config_user() {
|
||||||
local host="$1" config="$2"
|
local config="$1"
|
||||||
[ -f "$config" ] || return 1
|
if [ -f "$config" ]; then
|
||||||
awkrun host="$host" '
|
awkrun host="$host" '
|
||||||
BEGIN {
|
BEGIN {
|
||||||
in_host = 0
|
in_host = 0
|
||||||
|
@ -215,44 +215,37 @@ in_host && tolower($1) == "user" {
|
||||||
print "SSH_USER=\"" $2 "\""
|
print "SSH_USER=\"" $2 "\""
|
||||||
found_user = 1
|
found_user = 1
|
||||||
}
|
}
|
||||||
in_host && tolower($1) == "port" {
|
|
||||||
print "SSH_PORT=\"" $2 "\""
|
|
||||||
}
|
|
||||||
END {
|
END {
|
||||||
if (found_user) print "true"
|
if (found_user) print "true"
|
||||||
else print "false"
|
else print "false"
|
||||||
}
|
}
|
||||||
' -- "$config"
|
' -- "$config"
|
||||||
|
else
|
||||||
|
echo "false"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
function __update_sshopts_user() {
|
||||||
function __update_sshopts_misc() {
|
# Déterminer le compte utilisateur de connexion et le placer dans la
|
||||||
# Déterminer l'utilisateur et le port de connexion et les placer dans les
|
# variables SSH_USER. Analyser pour cela les arguments qui sont fournis dans
|
||||||
# variables SSH_USER et SSH_PORT, respectivement. Analyser pour cela les
|
# les paramètres 2..@. Ajouter l'option -l $DEFAULT_USER au tableau sshopts
|
||||||
# arguments qui sont fournis dans les paramètres 2..@
|
# si aucune définition pour l'hôte $1 n'existe dans l'un des fichiers de
|
||||||
# Ajouter l'option -l DEFAULT_USER au tableau sshopts si aucune définition
|
# configuration de ssh et si l'utilisateur n'a pas déjà spécifié un compte
|
||||||
# pour l'hôte $1 n'existe dans l'un des fichiers de configuration de ssh et
|
# utilisateur.
|
||||||
# si l'utilisateur n'a pas déjà spécifié un compte utilisateur.
|
|
||||||
SSH_USER=
|
SSH_USER=
|
||||||
SSH_PORT=22
|
|
||||||
# L'utilisateur est peut-être fourni avec l'hôte
|
# L'utilisateur est peut-être fourni avec l'hôte
|
||||||
local user host
|
|
||||||
splituserhost "$1" user host; shift
|
|
||||||
if [ -n "$user" ]; then
|
if [ -n "$user" ]; then
|
||||||
SSH_USER="$user"
|
SSH_USER="$user"
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
# Analyser les configuration de ssh
|
# Analyser les configuration de ssh
|
||||||
eval "$(__parse_ssh_config "$1" ~/.ssh/config)" && return
|
eval "$(__parse_ssh_config_user ~/.ssh/config)" && return
|
||||||
eval "$(__parse_ssh_config "$1" /etc/ssh/ssh_config)" && return
|
eval "$(__parse_ssh_config_user /etc/ssh/ssh_config)" && return
|
||||||
# Analyser les arguments
|
# Analyser les arguments
|
||||||
local i=1
|
local i=1
|
||||||
while [ $i -le $# ]; do
|
while [ $i -le $# ]; do
|
||||||
if [ "${!i}" == -l ]; then
|
if [ "${!i}" == -l ]; then
|
||||||
i=$(($i + 1))
|
i=$(($i + 1))
|
||||||
SSH_USER="${!i}"
|
SSH_USER="${!i}"
|
||||||
elif [ "${!i}" == -p ]; then
|
|
||||||
i=$(($i + 1))
|
|
||||||
SSH_PORT="${!i}"
|
|
||||||
fi
|
fi
|
||||||
i=$(($i + 1))
|
i=$(($i + 1))
|
||||||
done
|
done
|
||||||
|
@ -263,14 +256,59 @@ function __update_sshopts_misc() {
|
||||||
SSH_USER="$DEFAULT_USER"
|
SSH_USER="$DEFAULT_USER"
|
||||||
sshopts=(${DEFAULT_USER:+-l "$DEFAULT_USER"} "${sshopts[@]}")
|
sshopts=(${DEFAULT_USER:+-l "$DEFAULT_USER"} "${sshopts[@]}")
|
||||||
}
|
}
|
||||||
|
function __parse_ssh_config_port() {
|
||||||
|
local config="$1"
|
||||||
|
if [ -f "$config" ]; then
|
||||||
|
awkrun host="$host" '
|
||||||
|
BEGIN {
|
||||||
|
in_host = 0
|
||||||
|
found_port = 0
|
||||||
|
}
|
||||||
|
!found_port && tolower($1) == "host" {
|
||||||
|
in_host = 0
|
||||||
|
for (i = 2; i <= NF; i++) {
|
||||||
|
if ($i == host) {
|
||||||
|
in_host = 1
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
in_host && tolower($1) == "port" {
|
||||||
|
print "SSH_PORT=\"" $2 "\""
|
||||||
|
found_port = 1
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
if (found_port) print "true"
|
||||||
|
else print "false"
|
||||||
|
}
|
||||||
|
' -- "$config"
|
||||||
|
else
|
||||||
|
echo "false"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
function __update_sshopts_port() {
|
||||||
|
# Déterminer le port de connexion et le placer dans la variable SSH_PORT.
|
||||||
|
# Analyser pour cela les arguments qui sont fournis dans les paramètres 2..@
|
||||||
|
SSH_PORT=22
|
||||||
|
# Analyser les configuration de ssh
|
||||||
|
eval "$(__parse_ssh_config_port ~/.ssh/config)" && return
|
||||||
|
eval "$(__parse_ssh_config_port /etc/ssh/ssh_config)" && return
|
||||||
|
# Analyser les arguments
|
||||||
|
local i=1
|
||||||
|
while [ $i -le $# ]; do
|
||||||
|
if [ "${!i}" == -p ]; then
|
||||||
|
i=$(($i + 1))
|
||||||
|
SSH_PORT="${!i}"
|
||||||
|
fi
|
||||||
|
i=$(($i + 1))
|
||||||
|
done
|
||||||
|
}
|
||||||
function __update_sshopts_cm() {
|
function __update_sshopts_cm() {
|
||||||
# Rajouter le cas échéant les options pour le multiplexage des connexions au
|
# Rajouter le cas échéant les options pour le multiplexage des connexions au
|
||||||
# tableau sshopts, pour l'hôte $1
|
# tableau sshopts, pour l'hôte $1
|
||||||
# SSH_USER doit être défini
|
# SSH_USER doit être défini
|
||||||
local user host
|
|
||||||
local found cmhost cmkey tmphost shared control persist
|
local found cmhost cmkey tmphost shared control persist
|
||||||
local -a hosts
|
local -a hosts
|
||||||
splituserhost "$1" user host
|
|
||||||
for cmhost in "${CMHOSTS[@]}"; do
|
for cmhost in "${CMHOSTS[@]}"; do
|
||||||
[ -n "$cmhost" ] || continue
|
[ -n "$cmhost" ] || continue
|
||||||
cmkey="$cmhost"; cmkey="${cmkey//./_}"; cmkey="${cmkey//-/_}"
|
cmkey="$cmhost"; cmkey="${cmkey//./_}"; cmkey="${cmkey//-/_}"
|
||||||
|
@ -319,6 +357,13 @@ function __update_sshopts_cm() {
|
||||||
fi
|
fi
|
||||||
[ -n "$persist" ] && sshopts=("${sshopts[@]}" -o ControlPersist="$persist")
|
[ -n "$persist" ] && sshopts=("${sshopts[@]}" -o ControlPersist="$persist")
|
||||||
}
|
}
|
||||||
|
function __update_sshopts() {
|
||||||
|
local user host
|
||||||
|
splituserhost "$1" user host; shift
|
||||||
|
__update_sshopts_user "$@"
|
||||||
|
__update_sshopts_port "$@"
|
||||||
|
__update_sshopts_cm
|
||||||
|
}
|
||||||
|
|
||||||
function show_vars() {
|
function show_vars() {
|
||||||
local -a sshopts
|
local -a sshopts
|
||||||
|
@ -329,8 +374,7 @@ function show_vars() {
|
||||||
set_array_cmd args @ "$@"
|
set_array_cmd args @ "$@"
|
||||||
for host in "${hosts[@]}"; do
|
for host in "${hosts[@]}"; do
|
||||||
array_copy sshopts SSHOPTS
|
array_copy sshopts SSHOPTS
|
||||||
__update_sshopts_misc "$host" "$@"
|
__update_sshopts "$host" "$@"
|
||||||
__update_sshopts_cm "$host"
|
|
||||||
set_var_cmd host "$host"
|
set_var_cmd host "$host"
|
||||||
set_array_cmd options sshopts
|
set_array_cmd options sshopts
|
||||||
done
|
done
|
||||||
|
@ -349,8 +393,7 @@ function do_ssh() {
|
||||||
[ -z "$onehost" ] && etitle "$host"
|
[ -z "$onehost" ] && etitle "$host"
|
||||||
|
|
||||||
array_copy sshopts SSHOPTS
|
array_copy sshopts SSHOPTS
|
||||||
__update_sshopts_misc "$host" "$@"
|
__update_sshopts "$host" "$@"
|
||||||
__update_sshopts_cm "$host"
|
|
||||||
${exec:+exec} "$SSH" "${sshopts[@]}" "$host" "$@" || r=$?
|
${exec:+exec} "$SSH" "${sshopts[@]}" "$host" "$@" || r=$?
|
||||||
|
|
||||||
[ -z "$onehost" ] && eend
|
[ -z "$onehost" ] && eend
|
||||||
|
|
Loading…
Reference in New Issue