Como testar se o servidor ssh permite senhas?

5

Eu quero testar se um servidor ssh permite ou não senhas e imediatamente fecha a conexão sem realmente tentar um login.

Algo parecido com isto:

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

Eu já fiz isso uma vez antes, mas não consegui encontrar scripts ou documentos antigos. Dia triste. : - /

    
por CoolAJ86 01.11.2018 / 04:10

1 resposta

8

Eu encontrei meu script antigo:

ssh -v -n \
  -o Batchmode=yes \
  -o StrictHostKeyChecking=no \
  -o UserKnownHostsFile=/dev/null \
  DOES_NOT_EXIST@localhost 2>&1 | grep password
  • A opção -o Batchmode=yes causa um modo não interativo em que um fallback para senha resulta em falha.

  • O -v faz com que os métodos de autenticação sejam exibidos (entre outras coisas).

  • O -n faz com que o ssh não abra um shell (normalmente usado com tunelamento), que nesse caso fará com que ele saia imediatamente (caso você esteja se conectando a um honeypot ou a um serviço como o serveo .net que permite clientes sem autenticação)

  • -o StrictHostKeyChecking=no e -o UserKnownHostsFile=/dev/null aceitam automaticamente o host sem gravá-lo no arquivo de hosts conhecidos.

  • 2>&1 encaminha mensagens de depuração (stderr) para o sistema de registro (stdout) para que grep possa fazer sua mágica

Se a autenticação de senha estiver ativada para alguns usuários, ela será mostrada como ativada para todos os usuários (mas falhará após o prompt), até onde eu saiba. Eu suspeito que isso é assim que você não pode identificar positivamente que existe um usuário no sistema.

E para que eu não perca de novo: link

    
por 01.11.2018 / 04:49