Existe uma maneira simples de obter uma lista de todas as impressões digitais inseridas nas .ssh / allowed_keys || Arquivo .ssh / allowed_keys2?
ssh-keygen -l -f .ssh/authorized_keys
retornará apenas a impressão digital da primeira linha / entrada / chave pública
hackear com 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"
)
}
}'
mas existe uma maneira mais fácil ou comando ssh que não encontrei?
authorized_keys
arquivo, no qual osssh-keygen
baulks estão. Procurei uma maneira confiável de analisá-lo, mas o melhor que pude apresentar está coberto por esta resposta .Respostas:
Aqui está outro truque usando o bash simples, sem arquivos temporários:
Você pode facilmente torná-lo uma função no seu
.bashrc
:e chame-o com:
fonte
ssh-keygen -l -f /dev/stdin
parece não funcionar em um mac .. não obstante, não é relevante para servidores, mas gnaa apple ou é um "problema" do BSD/dev/stdin is not a public key file.
?/dev/stdin
não é uma grande idéia, em geral, é melhor usar-
, mas por alguma razãossh-keygen
não sabe sobre-
...local file="${1:-$HOME/.ssh/authorized_keys}"
permitir que ele funcione sem argumentos e usar como padrão o~/.ssh/authorized_keys
arquivo usual e citar o< "$file"
usado como entrada para owhile
loop.Aqui está uma maneira portátil de mostrar todas as principais impressões digitais de um determinado arquivo, testado no Mac e Linux:
Exemplo de uso:
fonte
#!/usr/local/bin/bash
. Eu, então, chamado a função adicionando esta como a última linha:fingerprint_keys $@
. Salvei o script comofingerprints.bash
, marcando-o como executávelchmod u+x ./fingerprints.bash
. Além disso, adicionei um comentário ao arquivo com o link para esta resposta, assim, próximo ao topo# solution from "Will" on SO http://serverfault.com/a/615892/126742
. Chame assim./fingerprints.bash ~/.ssh/authorized_keys
.#!/usr/bin/env bash
porque o caminho paraenv
é muito portátil e ele dizenv
para executar o Bash que ele conhece.Um one-liner baseado no truque / dev / stdin da resposta de ℝaphink e man xargs → EXEMPLOS :
fonte