Eu quero testar se um servidor ssh permite ou não senhas e fechar imediatamente a conexão sem realmente tentar um login.
Algo assim:
allows_password=$(ssh --some-option example.com)
if [ -z "$allows_password" ]; then
echo "Insecure Server Options"
else
echo "Insecure Password Access is not Allowed, Great!"
fi
Na verdade, eu já fiz isso uma vez antes, mas não consegui encontrar scripts ou documentos antigos. Dia triste. :-/
Encontrei meu script antigo:
A
-o Batchmode=yes
opção causa um modo não interativo em que um fallback para a senha resulta em falha.O
-v
faz com que os métodos de autenticação sejam exibidos (entre outras coisas).Isso faz com que o
-n
ssh não abra um shell (geralmente usado com tunelamento), o que neste caso fará com que ele saia imediatamente (caso você esteja se conectando a um honeypot ou a um serviço como serveo.net que permite clientes sem autenticação)-o StrictHostKeyChecking=no
e-o UserKnownHostsFile=/dev/null
aceita automaticamente o host sem gravá-lo no arquivo de hosts conhecidos.2>&1
encaminha mensagens de depuração (stderr) para o sistema de log (stdout) para que elegrep
possa fazer sua mágicaSe a autenticação de senha estiver habilitada para alguns usuários, ela será mostrada como habilitada para todos os usuários (mas falhará após o prompt), até onde eu sei. Eu suspeito que isso é para que você não possa identificar positivamente que um usuário existe no sistema.
E para não perder novamente: https://coolaj86.com/articles/testing-if-ssh-allows-passwords/