}
_khfix_common() {
- local host ip port
+ local host ip port file key
read -r host ip port < <(timeout -s 9 2 ssh -oBatchMode=yes -oControlMaster=no -oControlPath=/ -v $1 |& sed -rn "s/debug1: Connecting to ([^ ]+) \[([^\]*)] port ([0-9]+).*/\1 \2 \3/p" ||: )
+ file=$(readlink -f ~/.ssh/known_hosts)
if [[ ! $ip ]]; then
echo "khfix: ssh failed"
return 1
ip_entry=$ip
host_entry=$host
fi
+ tmpfile=$(mktemp)
if [[ $host != $ip ]]; then
- m ssh-keygen -R "$host_entry" -f $(readlink -f ~/.ssh/known_hosts)
- ll ~/.ssh/known_hosts
+ key=$(ssh-keygen -F "$host_entry" -f $file | sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/')
+ if [[ $key ]]; then
+ grep -Fv "$key" "$file" | sponge "$file"
+ fi
+ fi
+ key=$(ssh-keygen -F "$ip_entry" -f $file | sed -r 's/^.*([^ ]+ +[^ ]+) *$/\1/')
+ if [[ $key ]]; then
+ grep -Fv "$key" "$file" | sponge "$file"
fi
- m ssh-keygen -R "$ip_entry" -f $(readlink -f ~/.ssh/known_hosts)
ll ~/.ssh/known_hosts
rootsshsync
}
echo no args
fi
for arg; do
- printf "%qEOL\n" "${!arg}"
- printf "%s" "${!arg}" |& hexdump -C
+ if [[ -v $arg ]]; then
+ printf "%qEOL\n" "${!arg}"
+ printf "%s" "${!arg}" |& hexdump -C
+ else
+ echo arg $arg is unset
+ fi
done
}
sk() {
- # 2029: "unescaped, this expands on the client side." yes, I know how ssh works
- # 2164: "Use 'cd ... || exit' or 'cd ... || return' in case cd fails." i have automatic error handling
- # 2086: unquoted $var
+
+
+ # note, if you do something like this
+ # x=( prefix* )
+ # then disable the warning with:
+ # shellcheck disable=SC2206 # globbing is intended
+
+ # 2029: "unescaped, this expands on the client side.": yes, I know how ssh works
+ # 2164: "Use 'cd ... || exit' or 'cd ... || return' in case cd fails.": i have automatic error handling
+ # 2086: unquoted $var: Quoting every var I set is way too much quotes.
+ # 2068: Double quote array expansions to avoid re-splitting elements: same as above.
+ # 2033: command arg is a function name: too many false positives.
+
+
+ # these ones I had disabled, but without a good written explanation, so enabling them temporarily
# 2046: unquoted $(cmd)
- # 2068: Double quote array expansions to avoid re-splitting elements.
# 2119: Functions with optional args get bad warnings when none are passed.
- # 2033: too many false positives for thing that will never work, passing shell function to find.
- # i had -x as an arg, but debian testing(stretch) doesn\'t support it
- shellcheck -x -e 2029,2164,2086,2046,2068,2119,2033 "$@" || return $?
- # had this before. not sure what it is 2119
+
+ shellcheck -W 999 -x -e 2029,2164,2086,2068,2033 "$@" || return $?
}