¿Existe un comando (o una frase breve) para eliminar una clave ssh en un servidor? ¿Algo así como lo opuesto a ssh-copy-id?
Respuesta1
Como sugirió Ignatio, esto se puede hacer con grep -v
.
A continuación se muestra un ejemplo que elimina la clave que contiene some unique string
o simplemente elimina el authorized_keys
archivo cuando no queda ninguna otra clave.
if test -f $HOME/.ssh/authorized_keys; then
temp_file=$(mktemp)
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then
cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file;
else
rm $HOME/.ssh/authorized_keys && rm $temp_file;
fi;
fi
Reemplácelo some unique string
con algo que solo exista en la clave que desea eliminar.
Como una línea sobre ssh, esto se convierte en
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then temp_file=$(mktemp); if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file; else rm $HOME/.ssh/authorized_keys && rm $temp_file; fi; fi'
Probado en Linux (SLES) y HP-UX.
Respuesta2
sed
proporciona una solución compacta:
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
Esto guardará el original authorized_keys
en formato authorized_keys.bak
. Si no desea la copia de seguridad, simplemente cámbiela -i.bak
a -i
.
Incluso puedes eliminar varias claves:
sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys
El único truco aquí eslos caracteres especiales en la expresión regular deben tener escape.
Respuesta3
No. Necesitará ingresar SSH y usar sed
o grep
eliminar la clave del archivo.
Respuesta4
Phil ya respondió esta pregunta, pero quiero hacer una suma y hacértelo más fácil. Y dado que está solicitando lo contrario de ssh-copy-id, supongo que desea ejecutarlo en una máquina autorizada.
Las claves ssh solo contienenbase64caracteres. Entonces puedes usar un carácter como delimitador sed que no está en esa lista. Utilicemos '#'.
ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"
Reemplace el nombre de host con la IP del servidor.
La opción PasswordAuthentication hará que ssh falle si solicita la contraseña