Verificando as teclas ssh com senhas

8

Eu tenho vários 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 na conta correta nos servidores corretos.

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

Eu tentei uma série de coisas, como usar um ssh-agente ssh-addem seguida, o problema surge quando ssh-addse pediu senha.

Existe uma maneira de obter algo como opensslverificar a senha, falhar levemente com um código de retorno, 1se a chave tiver uma senha?

Obrigado!

Peter Farmer
fonte
Você poderia esclarecer se o requisito é ter uma senha ou não? - e por que razões?
user1686
grawity: Meu requisito é garantir que os usuários definam senhas em suas chaves ssh, apenas chaves com senhas serão distribuídas para os outros servidores.
Peter Farmer

Respostas:

11

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

Portanto, você pode determinar se um arquivo-chave usa uma senha, executando-o finde greppara ver se ele possui a sequência '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 possuem senhas. Em seguida, você pode associá-los a uma lista de todos os arquivos-chave para destacar aqueles que não usam uma senha. Uma lista de todos os arquivos-chave pode ser obtida, por exemplo, deixando o -execparâmetro de fora, da seguinte maneira:

# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print
Jawa
fonte
Não é mais possível com o novo formato de chave SSH, o Proc-Typecabeçalho não é gravado no arquivo, apesar de estar criptografado.
Oneiroi 02/08/19