X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=brc;h=a51d7db6c7b6dcf8788106758c1dc8890caf64b1;hb=d4366929e6e200155b010dc05ce74255ee6a45ed;hp=c47fca957f6c178a767369f9ca3e8caa9595155d;hpb=62dede3e7ad2c0ee566145f3efabf1fd23df46a7;p=distro-setup diff --git a/brc b/brc index c47fca9..a51d7db 100644 --- a/brc +++ b/brc @@ -322,8 +322,9 @@ fpst() { # file paste } _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 @@ -335,11 +336,17 @@ _khfix_common() { 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 }