Aplicar senhas de chave SSH?

9

Estou tentando remover logons baseados em senha para SSH. No entanto, não quero permitir chaves ssh sem senha, pois isso seria ainda pior.

Como posso garantir que apenas as chaves SSH que possuem senhas possam se conectar?

Se isso não puder ser feito, existem alternativas, como gerenciar centralmente a geração de chaves SSH e impedir que os usuários gerem e / ou usem suas próprias chaves? Algo como PKI, suponho.

Lee B
fonte

Respostas:

20

A frase secreta que pode ser definida na chave privada não está relacionada ao servidor SSH ou à conexão a ele. Definir uma senha para a chave privada é apenas uma medida de segurança que o proprietário da chave pode tomar para impedir o acesso ao seu shell remoto por terceiros, caso a chave privada seja roubada.

Infelizmente, você não pode forçar os usuários a proteger suas chaves privadas com senhas. Às vezes, são necessárias chaves privadas desprotegidas para automatizar o acesso ao servidor SSH remoto. Um bom hábito que eu recomendo para esses casos é aconselhar os usuários a fazer o hash do arquivo known_hosts (armazenado em ~ / .ssh / known_hosts ), que mantém informações sobre os hosts remotos aos quais o usuário se conecta, usando o seguinte comando:

ssh-keygen -H -f ~/.ssh/known_hosts

Dessa forma, mesmo que terceiros tenham acesso a uma chave privada desprotegida, seria extremamente difícil descobrir para quais hosts remotos essa chave é válida. Obviamente, limpar o histórico do shell é obrigatório para que essa técnica tenha qualquer valor.

Além disso, outra coisa que você sempre deve ter em mente é não permitir que o root efetue login remotamente adicionando o seguinte na configuração do servidor SSH (sshd_config):

PermitRootLogin no

Por outro lado, se você deseja impedir que os usuários usem chaves para autenticar, mas usar senhas, adicione o seguinte ao seu sshd_config :

PasswordAuthentication yes
PubkeyAuthentication no
Born To Ride
fonte
8

Não é possível.

Os usuários podem fazer qualquer coisa com seus arquivos-chave, converter em sem senha, mesmo que você o tenha gerado, por exemplo.

siposa
fonte
3

Você não pode. Depois que o usuário tiver os dados principais em sua posse, você não poderá impedi-lo de remover a senha. Você precisará procurar outras maneiras de fazer sua autenticação.

mulher
fonte
2

Para obter o controle das chaves do usuário, todas as chaves devem ser movidas para um diretório de propriedade raiz onde as chaves sejam legíveis, mas não modificáveis ​​pelo usuário final. Isso pode ser feito atualizando o sshd_config.

Quando os arquivos de chaves estiverem em um local controlado, você precisará de uma interface de gerenciamento para atualizar (e aplicar a política de senha), seguida pela distribuição das chaves nos hosts necessários. Faça um você mesmo ou dê uma olhada em produtos como FoxT / Tectia etc.

PT
fonte
... que quebra os benefícios de-chave pública
Patwie
0

Uma atenuação seria usar o plug-in do módulo PAM do autenticador do google. Geralmente disponível nos pacotes oficiais.

Isso disponibilizará o 2FA por meio de um código de 6 dígitos no seu smartphone.

Instruções aqui: Como configurar a autenticação multifator para SSH no Ubuntu 16.04

Manjericão A
fonte
1
Você deve observar que isso não responde diretamente à pergunta, mas é uma (boa) alternativa.
ceejayoz
1
@ceejayoz Você está certo. Eu adicionei "Uma mitigação seria usar .." no início da resposta agora para deixar claro que é uma alternativa.
Basil A
-1

SIMPLES, você apenas estende o protocolo SSH para que o cliente ou agente SSH relate / defina um sinalizador para dizer se a chave privada original foi criptografada ou não (talvez o lado do servidor possa até fazer uma consulta) - já que o lado do cliente tem visibilidade da chave privada e até solicita a senha quando a chave é criptografada.

wallabyted
fonte