Verifique se o acesso root é permitido sem a chave ssh

1

Eu quero verificar via BASH se o acesso root em um determinado servidor é possível sem uma chave ssh. Então o script deve verificar se você tem acesso sem chave SSH ou não. Aqui está minha tentativa: (pseudocódigo)

/usr/bin/ssh -o BatchMode=yes -o PreferredAuthentications=password
if [[ "$?" == "255" ]]; then
    echo "root access possible without key"
else
    echo "not possbile"
fi

Mas este código não funciona simplesmente porque o código de erro é sempre o mesmo. Não importa se o servidor precisa de uma chave SSH ou não. Minha pergunta é agora, com qual comando posso saber se o servidor precisa de uma chave SSH para fazer o login ou não? Ou, qual comando me dá um código de erro para verificar isso?

Meu objetivo é pesquisar toda a rede local em busca de servidores que ainda não usam uma chave SSH

Obrigado

    
por Jietzo Rawit 12.07.2018 / 11:43

2 respostas

5

Eu não acho que você pode fazer isso sem realmente tentar a chave correta ou senha, ou verificar a configuração do servidor.

sshd pede felizmente ao cliente uma senha, mesmo se você tiver PermitRootLogin prohibit-password set, e a senha nunca funcionará. Ele também pede uma senha mesmo se você tiver PermitRootLogin no e o login não funcionar mesmo com uma chave. Se bem me lembro, ele até mesmo passa pelo PAM para falsificar a tentativa de autenticação, ele apenas faz isso com uma senha inválida conhecida, de modo que você não pode dizer a partir do momento se a autenticação de senha é permitida. Isso é semelhante para AllowUsers etc.

É claro que, além disso, usar BatchMode desativa a solicitação de senhas no lado do cliente (mencionada como a primeira na man page), então a combinação de -o BatchMode=yes -o PreferredAuthentications=password não é muito útil.

Você terá que realmente fazer o login no sistema e verificar quais métodos de autenticação funcionam. Se você conseguir fazer o login com uma chave, essa chave estará em uso. Se você puder fazer o login com uma senha, a senha estará em uso. Depois de efetuar login, verifique se o valor de PermitRootLogin não é yes (o padrão é prohibit-password ) e se a raiz authorized_keys contém a (s) chave (s) que deve conter e nenhuma outra.

    
por 12.07.2018 / 11:59
1

Espero que você não consiga verificar isso.

Um servidor ssh não deve permitir que você adquira esse tipo de informação em sua configuração interna de fora do servidor. Fazer o contrário representaria um risco de segurança.

Por favor, se você atingir este objetivo, relate sua técnica como um bug para desenvolvedores do openssh.

    
por 12.07.2018 / 12:32