Comando para eliminar una clave autorizada ssh en el servidor

Comando para eliminar una clave autorizada ssh en el servidor

¿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 stringo simplemente elimina el authorized_keysarchivo 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 stringcon 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

sedproporciona una solución compacta:

sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys

Esto guardará el original authorized_keysen formato authorized_keys.bak. Si no desea la copia de seguridad, simplemente cámbiela -i.baka -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 sedo grepeliminar 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

información relacionada