SSH via cert-authority

1

Estou tentando usar o SSH usando certificados assinados. Estou usando ssh -i keys/client.key para se conectar ao dispositivo de destino. Se eu gerar uma chave pública a partir dessa chave privada (com ssh-keygen -y -f keys/client.key ) e colocar isso no arquivo .ssh / authorized_keys, posso me conectar sem problemas.

O que estou tentando fazer é usar a autoridade de certificação para permitir que todas as chaves assinadas por essa autoridade de certificação efetuem login como esse usuário. Eu usei ssh-keygen -y -f keys/ca.key para gerar uma chave pública e colocá-la em authorized_keys como "cert-authority sh-rsa AAAB3N ..... Z". Meu entendimento de sites diferentes é que agora deve "funcionar", exceto que isso não acontece. No lado do cliente eu só recebo "Permission denied (publickey)". Não tenho outras listagens no arquivo authorized_keys . No lado do servidor, não recebo nenhuma mensagem de erro e apenas uma mensagem que o cliente desconectou.

Estou sentindo falta de algo simples? Como posso depurar por que não está funcionando?

Editar # 1

Gerei as chaves privadas com o EasyRSA, que são alguns scripts de shell sobre chamadas openssl. Eu acho que o problema pode ser que a chave privada foi gerada, em seguida, um CSR, em seguida, um certificado assinado. Portanto, não acho que a chave privada esteja "assinada" de qualquer maneira.

Editar # 2

Eu tentei ssh-keygen -s ca.key -I key client.key e recebi 'do_ca_sign: não é possível abrir "client.key"'. Eu tentei com uma chave RSA recém-gerada feita por ssh-keygen e funcionou bem para o ca.key parece estar bem. Eu estou pensando que há algo sobre a chave privada gerada pelo openssl que ela não gosta.

    
por Tim Tisdall 23.01.2015 / 23:07

2 respostas

1

  1. Seu cliente não está apresentando um certificado porque não possui um. Você precisa gerar um ( ssh-keygen -s keys/ca.key -I jruser -n jruser keys/client.key.pub ). O novo certificado ( keys/client.key_cert.pub ) será automaticamente selecionado por ssh e apresentado ao servidor.
  2. Sua cert-authority linha em authorized_keys não tem a atribuição principals exigida (por exemplo, principals="jruser" ).
  3. Para depurá-lo, você pode usar ssh -v como de costume. Os algoritmos de autenticação possuem "cert" em seus nomes quando a autenticação de certificado está sendo usada.
  4. Sugiro usar a opção TrustedUserCAKeys (em sshd_config ) em vez de escrever cert-authority lines, porque é a forma mais antiga e mais bem testada de certificados de usuário ssh.

Um bom guia conciso para configurar isso (e certificados de chave de host também) é link

    
por 24.01.2015 / 00:06
0

Parece haver vários problemas acontecendo aqui ...

A principal confusão é que você assina chaves públicas e não chaves privadas. Se você tentar assinar uma chave privada chamada "id_rsa", o ssh-keygen irá simplesmente ignorar isso e usar "id_rsa.pub" no mesmo diretório. Se essa chave pública não estiver lá, ela fornecerá a mesma mensagem de erro se você tentou assinar um arquivo que não existia.

Além disso, ao entrar, se você usar uma chave privada chamada "some.key", sua chave pública assinada precisa ser chamada de "some.key-cert.pub" e estar no mesmo diretório ou então ela ganhou Não use isso e a coisa toda não funciona.

Quanto a "principais" ... Se você os tiver (eles são opcionais), eles especificam em quais usuários você pode realmente efetuar login. Portanto, se você assinar a chave pública com os principais, só poderá usá-la para fazer login como esses usuários.

    
por 26.01.2015 / 20:51