Alguns dos meus sistemas Linux e FreeBSD têm dezenas de usuários. A equipe usará esses nós "ssh gateway" para SSH em outros servidores internos.
Estamos preocupados que algumas dessas pessoas usem uma chave SSH privada não criptografada (uma chave sem uma senha . Isso é ruim , porque se um cracker obtiver acesso à sua conta nesta máquina, eles poderiam roubar a chave privada e agora ter acesso a qualquer máquina que use essa mesma chave.Por motivos de segurança, exigimos que todos os usuários criptografem suas chaves SSH privadas com uma senha.
Como posso saber se uma chave privada não está criptografada (por exemplo, não contém uma senha)? Existe um método diferente para fazer isso em uma chave blindada ASCII vs. uma chave não blindada ASCII?
Atualizar:
Para esclarecer, suponha que eu tenha acesso de superusuário na máquina e que possa ler as chaves privadas de todos.
Bem, as chaves privadas do OpenSSH com senhas vazias não são realmente criptografadas.
Criptografado chaves privadas são declaradas como tal no arquivo de chave privada. Por exemplo:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC
BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----
Então, algo como
# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa
deve fazer o truque.
Procurei por tudo isso e nunca encontrei uma resposta satisfatória, mas consegui construir uma, então ...
Observe que isso atualizará o arquivo se funcionar. Portanto, se você estiver tentando não ser notado pelos usuários cujas chaves você está testando, copie a chave primeiro. OTOH, como você acabou de pegar seu usuário com uma chave sem senha, talvez você não se importe se ele perceber. : D
$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Key has comment '/home/rlpowell/.ssh/KEYTEST'
Your identification has been saved with the new passphrase.
$ echo $?
0
$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Bad passphrase.
$ echo $?
1
Se você tiver acesso à chave privada, suponho, poderá usá-la sem senha para se autenticar na chave pública. Se isso funcionar, você sabe que não tem senha. Se tivesse, seria exibida uma mensagem de erro.
Se você não tem acesso à chave privada, duvido que possa detectar isso. O objetivo da frase secreta é "desbloquear" a chave privada; ela não tem função em relação à chave pública.
De fato, se fosse, tornaria o sistema menos seguro. Pode-se usar a chave pública, disponível para tentar montar força bruta ou outros ataques que tentam decifrar a senha.