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