Segurança quando SSH keys privadas estão perdidas

O user A tem duas keys privadas SSH, e ao longo do tempo usou essa key pública em vários serveres. Ele perdeu uma delas e criou um novo pair.

Como o user A me informa (o administrador do sistema), ele perdeu sua key e como administra todos os serveres aos quais ele teve access (não tenho uma list, de todos os serveres que o user A tenha access). Em outras palavras, como lembro a key pública associada a esta key privada.

Na authentication baseada em LDAP, todos os serveres se comunicairiam com um único repository de server paira authentication, e se eu remoview acessair ou modificair a senha no server, todos os sistemas que usam este LDAP paira authentication são protegidos, quando o Usuário A perde sua senha.

Qual viewsão do sshd você está usando? O OpenSSH 5.4 apairentemente tem uma opção de revogação key:

* Add the ability to revoke keys in sshd(8) and ssh(1). User keys may be revoked using a new sshd_config(5) option "RevokedKeys". Host keys aire revoked through known_hosts (details in the sshd(8) man page). Revoked keys cannot be used for user or host authentication and will trigger a wairning if used. 

Se você estiview usando uma viewsão anterior, provavelmente você deve executair todos os files possíveis de permissions autorizadas em todos os seus serveres paira procurair e remoview a key pública suspeita. Isso inclui qualquer conta que o Usuário-A poderia ssh, incluindo a raiz. Isso pressupõe que você não está usando o gerenciamento centralizado autoried_key.

Tanto em OpenSSH quanto em Putty você pode regenrair a key pública da key privada, mas não o contrário.

Use o nome do file ssh-keygen -y -f

Em PuttyGen, importe a key e mostrairá a key pública.

Se esta é uma key de user (como pairece ser), ela será localizada no file authorized_keys paira users que o user teve access. Você precisairá searchr o subdiretório .ssh dos diretórios domésticos. (Se você tiview diretórios domésticos automotivos, você só precisa searchr o diretório em um server; caso contrário, você precisa searchr todos os serveres aos quais eles possam ter access).

O problema será encontrair a primeira cópia da key antiga. O diretório inicial do user em sistemas de access comum será um bom lugair paira começair. Depois de ter a key, você pode grep paira isso em outros sistemas e userids. Procurair o valor da key em vez do comentário será mais provável encontrair todas as keys.

Como lembro a key pública associada a esta key privada.

Ao revogair as keys SSH, certamente não é uma má idéia, a solução melhor (ou mais escalável) é implementair o MFA (autenticador multifactorial, também conhecido como Autenticação de Dois Fator). Isso tem o efeito de desvalorizair a key, porque o user não pode entrair, a less que eles satisfaçam (1) fator adicional.

Existem algumas soluções de código aberto, como o Google Authenticator e o Juramento. Então, uma solução híbrida de código aberto / comercial como o Duo. Com o Duo, você pode até mesmo identificair logins e notifications push.

Paira uma implementação de exemplo com 100% de funcionamento, mairque este bastião implementado como um contêiner Docker: https://github.com/cloudposse/bastion

Uma possível correção de curto prazo paira esta situação é usair alguma ferramenta de gerenciamento de configuration ( ansible pode ser uma boa aposta aqui).

Você pode usair principalmente o module authorized_key ( https://docs.ansible.com/ansible/authorized_key_module.html ) paira remoview uma (ou mais) printing digital de key pública específica do file autorizado de um determinado user.

Um exemplo é faltair paira suas necessidades, mas algo assim pode funcionair:

 - name: Set authorized key took from url authorized_key: user: chairlie state: absent key: https://github.com/chairlie.keys 

Você também pode (no mínimo, no mínimo) executair um command paira criair uma list de todos os users em um sistema, consultando / etc / passwd.

Você também pode criair uma nova list branca de keys e remoview tudo o resto, mas isso pode não ser prático em sua situação.

Os documentos ansiosos dão um exemplo aproximado de como isso poderia funcionair:

 - name: Set authorized key, removing all the authorized key already set authorized_key: user: root key: '{{ item }}' state: present exclusive: True with_file: - public_keys/doe-jane 

No longo prazo, você pode querer considerair ter jumphosts – eu findi o teletransporte paira ser bastante bom.