Algunos software de servidor SSH son compatibles con el protocolo RFC 4819 para administrar claves SSH autorizadas, pero es tan raro que casi no
existe
3
Excelente pregunta, realmente falta funcionalidad a ssh-copy-id para facilitar la rotación de claves.
Zabuzzman
1
Vale la pena señalar que ssh-keygenofrece la -Ropción de eliminar claves known_hosts, pero lamentablemente ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keysno funciona. En su lugar, usaría la sedopción a continuación.
Digital Trauma
Respuestas:
10
Como Ignatio sugirió, esto se puede hacer con grep -v.
Aquí hay un ejemplo que elimina la clave que contiene some unique stringo simplemente elimina el authorized_keysarchivo cuando no queda otra clave.
if test -f $HOME/.ssh/authorized_keys; then
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then
cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
else
rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
fi;
fi
Reemplace some unique stringcon algo que solo existe en la clave que desea eliminar.
Como una línea sobre ssh esto se convierte
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; else rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; fi; fi'
Si solo usa los caracteres base64 en el archivo de clave pública (por ejemplo, awk '{print $2}' ~/.ssh/id_rsa.pub), entonces no necesita preocuparse por escapar de ningún carácter especial.
Juan
7
No Deberá ingresar y usar SSH sedo grepeliminar la clave del archivo.
Gracias. Mantendré la pregunta abierta un poco más para ver si alguien también puede proporcionar un script que haga lo contrario de ssh-copy-id
grm
@grm: ¡Te sugiero que mantengas la pregunta abierta para siempre, o al menos hasta que se implemente un ssh-undo-copy-id! ;-)
Max L.
0
Phil ya respondió a esta pregunta, pero quiero agregar y hacer que sea más fácil para usted. Y dado que está solicitando el reverso de ssh-copy-id, supongo que desea ejecutarlo en una máquina autorizada.
Las claves ssh solo contienen caracteres base64 . Entonces puede usar un char como delimitador de sed que no está en esa lista. Usemos '#'.
El 'comentario' en la clave de publicación puede no tener caracteres base64. Si tiene un "#", entonces su ejemplo se rompe. Tal vez usar awk '{print $2}' ~/.ssh/id_rsa.pubcon algunos sedo en su grep -vlugar.
ssh-keygen
ofrece la-R
opción de eliminar clavesknown_hosts
, pero lamentablementessh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys
no funciona. En su lugar, usaría lased
opción a continuación.Respuestas:
Como Ignatio sugirió, esto se puede hacer con
grep -v
.Aquí hay un ejemplo que elimina la clave que contiene
some unique string
o simplemente elimina elauthorized_keys
archivo cuando no queda otra clave.Reemplace
some unique string
con algo que solo existe en la clave que desea eliminar.Como una línea sobre ssh esto se convierte
Probado en Linux (SLES) y HP-UX.
fuente
sed
es mejor para hacer estosed
proporciona una solución compacta:Esto guardará el original
authorized_keys
enauthorized_keys.bak
. Si no desea la copia de seguridad, simplemente cambie-i.bak
a-i
.Incluso puedes eliminar varias claves:
La única parte difícil aquí es que los caracteres especiales en la expresión regular necesitan escapar .
fuente
awk '{print $2}' ~/.ssh/id_rsa.pub
), entonces no necesita preocuparse por escapar de ningún carácter especial.No Deberá ingresar y usar SSH
sed
ogrep
eliminar la clave del archivo.fuente
Phil ya respondió a esta pregunta, pero quiero agregar y hacer que sea más fácil para usted. Y dado que está solicitando el reverso de ssh-copy-id, supongo que desea ejecutarlo en una máquina autorizada.
Las claves ssh solo contienen caracteres base64 . Entonces puede usar un char como delimitador de sed que no está en esa lista. Usemos '#'.
Reemplace el nombre de host con la IP del servidor.
La opción de autenticación de contraseña hará que ssh falle si solicita contraseña
fuente
awk '{print $2}' ~/.ssh/id_rsa.pub
con algunossed
o en sugrep -v
lugar.