sshd: registrando a chave pública do cliente

1

Eu preciso executar um servidor SSH e registrar o IP & chave pública de qualquer cliente que tenta se conectar (sem realmente conceder acesso).

O caso de uso é o seguinte: Eu implanto este aplicativo da Web em um host remoto que, durante o processo de compilação, busca algumas dependências do github / bitbucket (o git usa o ssh, que usa as chaves). Agora, se eu quiser que este servidor de hospedagem tenha acesso a alguns repositórios privados, eu preciso colocar na lista branca sua chave pública, no entanto, o host não fornece acesso para ler a chave diretamente do sistema de arquivos. Mas eu posso apontar para qualquer host SSH e ele fará uma conexão, presumivelmente distribuindo sua chave pública. Eu gostaria de registrar isso.

Qualquer sugestão apreciada.

    
por sstur 28.03.2015 / 06:33

2 respostas

1

Se você precisar da chave pública para a lista de permissões, não poderá escolhê-la de uma tentativa com falha. Não é sobre o sshd ou sua configuração, mas o próprio protocolo, como autenticação de chave pública, segue assim:

  1. O cliente envia uma ID para o par de chaves.
  2. O servidor compara o ID com o arquivo authorized_keys .
  3. O servidor gera um número aleatório e usa a chave pública correspondente para criptografá-lo.
  4. O servidor envia para o cliente.
  5. O cliente descriptografa, combina com a chave de sessão compartilhada e envia de volta o MD5 disso.
  6. O servidor calcula a mesma soma de verificação e os compara.

Em tentativas mal-sucedidas, isso pára na etapa 2, impedindo que tudo continue ocorrendo. No entanto, toda a chave pública nunca é enviada para o servidor, apenas o ID.

Não se faz simplesmente logar algo que ele nem conhece.

    
por 28.03.2015 / 12:03
0

sshd na verdade não registra as chaves públicas usadas nas tentativas de login, com êxito ou não. O mais próximo que fica é registrar a impressão digital da chave pública em LogLevel VERBOSE .

  1. Envie a publickey por meio de outro método que não a tentativa de login com falha. Por exemplo. faça o upload para um script cgi / php que grava (acrescente ou modifique a taxa controlada) a chave para um arquivo com base no endereço IP da conexão do cliente, conforme visto pelo servidor.
  2. Solicite que a configuração emita uma solicitação GET para um URL específico em seu servidor da web e agarre dessa maneira. (Eu sinto que esta é uma versão inferior de 1).
  3. Peça que o aplicativo publique sua publickey em um local público e, em seguida, busque-a. É uma aplicação web e parte da beleza das teclas públicas é que elas não são segredos compartilhados.

Além disso, como isso é ServerFault, sinto-me obrigado a mencionar que o processo de implantação está incorreto. Você deve distribuir pacotes (assinados) conforme usados pelos gerenciadores de pacotes, .rpm , .deb , etc. Nesses pacotes, você pode incluir um script de configuração, se necessário.

    
por 28.03.2015 / 11:22