¿Hay una manera simple de obtener una lista de todas las huellas digitales ingresadas en .ssh / Authorized_keys || .ssh / Author_keys2 archivo?
ssh-keygen -l -f .ssh/authorized_keys
solo devolverá la huella digital de la primera línea / entrada / clave pública
piratear con awk:
awk 'BEGIN {
while (getline < ".ssh/authorized_keys") {
if ($1!~"ssh-(r|d)sa") {continue}
print "Fingerprint for "$3
system("echo " "\""$0"\"> /tmp/authorizedPublicKey.scan; \
ssh-keygen -l -f /tmp/authorizedPublicKey.scan; \
rm /tmp/authorizedPublicKey.scan"
)
}
}'
pero hay una manera más fácil o comando ssh que no encontré?
authorized_keys
archivo, en el que sessh-keygen
concentra. Busqué una forma confiable de analizarlo, pero lo mejor que pude encontrar está cubierto por esta respuesta .Respuestas:
Aquí hay otro truco usando bash simple sin archivos temporales:
Puede convertirlo fácilmente en una función en su
.bashrc
:y llámalo con:
fuente
ssh-keygen -l -f /dev/stdin
parece que no funciona en un mac .. sin embargo, no es relevante para servidores pero gnaa apple o es un "problema" de BSD/dev/stdin is not a public key file.
?/dev/stdin
no es una gran idea, en general, es mejor usar-
, pero por alguna razónssh-keygen
no sabe nada-
...local file="${1:-$HOME/.ssh/authorized_keys}"
permitir que funcione sin ningún argumento y predeterminado al~/.ssh/authorized_keys
archivo habitual y citar el< "$file"
utilizado como entrada alwhile
bucle.Aquí hay una forma portátil de mostrar todas las huellas digitales clave para un archivo determinado, probado en Mac y Linux:
Ejemplo de uso:
fuente
#!/usr/local/bin/bash
. Entonces llamé a la función mediante la adición de esto como la última línea:fingerprint_keys $@
. Guardé el script comofingerprints.bash
, marcándolo ejecutable conchmod u+x ./fingerprints.bash
. Además, agregué un comentario al archivo con el enlace a esta respuesta, así, cerca de la parte superior# solution from "Will" on SO http://serverfault.com/a/615892/126742
. Llámalo así./fingerprints.bash ~/.ssh/authorized_keys
.#!/usr/bin/env bash
porque la ruta paraenv
es muy portátil y le indicaenv
que ejecute el Bash que conoce.Una línea basada en el truco / dev / stdin de la respuesta de ℝaphink y man xargs → EJEMPLOS :
fuente