}
_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
}