Verificando chaves ssh tem senhas

8

Eu tenho um monte de usuários, que com chaves SSH têm acesso a contas em outros servidores. Atualmente tenho um script que coleta as chaves públicas ssh e as distribui para a conta correta nos servidores corretos.

O que eu quero fazer é obter esse script para verificar se qualquer dado usuário ssh tem uma senha antes de aceitar a chave pública e distribuí-la.

Já experimentei várias coisas, como o uso de ssh-agent e ssh-add e, em seguida, o problema surge quando ssh-add recebe a senha.

Existe uma maneira de obter algo como openssl para verificar a senha, falhar um pouco com um código de retorno de 1 se a chave tiver uma frase secreta?

Obrigado!

    
por Peter Farmer 19.10.2010 / 13:01

1 resposta

11

Se um arquivo-chave usa uma senha, ele tem o atributo "Proc-Type:" definido com a palavra "ENCRYPTED" anexada.

Assim, você pode determinar se um arquivo-chave usa a frase-senha, executando-a em find e grep para ver se ela tem a string 'ENCRYPTED'.

# list keyfiles that USE a passphrase
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -exec grep -q "ENCRYPTED" {} \; -print

imprime uma lista de arquivos que têm as frases secretas . Em seguida, você pode associá-los a uma lista de todos os arquivos de chave para destacar aqueles que não usam uma frase secreta. Uma lista de todos os arquivos de chave pode ser obtida, e. deixando o parâmetro -exec como segue:

# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print
    
por 19.10.2010 / 14:29