Estou acompanhando um texto bastante bom sobre certificados SSH escritos para RHEL 6 e openssh-5.3p1-94.el6
(o que o torna com cerca de 10 anos) enquanto tento imitar os exemplos no meu sistema atual do OpenBSD.
Um dos exemplos mostra a criação de uma chave de CA do host e a assinatura da chave RSA do host:
ssh-keygen -s ~/.ssh/ca_host_key -I host_name -h -Z host_name.example.com -V -1w:+54w5d /etc/ssh/ssh_host_rsa.pub
Enter passphrase:
Signed host key /root/.ssh/ssh_host_rsa-cert.pub: id "host_name" serial 0 for host_name.example.com valid from 2015-05-15T13:52:29 to 2016-06-08T13:52:29
Quando tentei isso no OpenBSD, não obtive a for host_name.example.com
saída. O texto diz que
A
-Z
opção restringe este certificado a um host específico dentro do domínio.
... e estou um pouco confuso sobre isso, pois o manual do OpenBSDssh-keygen(1)
nunca menciona uma -Z
opção. Também estou confuso sobre ssh-keygen
aceitar essa opção não documentada sem reclamar.
Olhando para o código-fonte parassh-keygen
, a -Z
opção é aceita, mas parece ter algo a ver com uma "cifra de formato" (ou possivelmente "formato de cifra") em vez de um nome de host (desde que eu esteja olhando para o código correto):
case 'Z':
openssh_format_cipher = optarg;
break;
Olhando para versões mais antigas do código, sempre teve algo a ver com "cifra de formato".
As notas de lançamento do OpenSSH não mencionam -Z
.
Pergunta: O ssh-keygen
RHEL 6 (não tenho certeza se a versão é relevante, mas a documentação equivalente sobre certificados SSH para RHEL 7 ou RHEL 8 parece não estar disponível) corrigido com patches somente RedHat que fazem -Z
agir de maneira diferente?
tl;dr; com versões mais recentes do OpenSSH, você deve usar a
-n
opção em vez de-Z
definir os principais (por exemplo, nome do host ou usuário).Sim, e o motivo pelo qual você não recebe um erro é porque essa
openssh_format_cipher
variável não é usada ao criar um certificado, mas apenas ao gerar uma chave com uma senha.Se você gerar uma chave
ssh-keygen -f ./path -Z some_garbage
e definir uma senha, receberá um erro.Sim, costumava ser. Você pode ver no
openssh-5.3p1-ssh-certificates.patch
daqui :Esse patch não é mais usado em rpms mais recentes.
Expandindo a resposta @mosvy, pois é um pouco mais longa do que apenas um comentário.
O RHEL6 foi lançado com OpenSSH 5.3p1 a partir de 2009 (acho que inicialmente era uma versão mais antiga, mas não a tenho em mãos agora) e ao longo dos anos novos recursos foram implementados ou retroportados do upstream, incluindo este para certificados SSH.
Mas isso foi bem mais tarde. Por alguns anos, houve suporte inicial para cartões inteligentes por meio do NSS (no changelog datado de 2007), que assumiu a
-n
mudança nossh-keygen
. Como isso funcionou é descrito, por exemplo , nesta postagem de blog de 2008 (não consigo descobrir se esse patch foi proposto a montante ou por que foi rejeitado, mas hoje em dia os cartões inteligentes são usados diretamente através da interface PKCS # 11 padrão). Para obter mais informações, consulte openssh-5.3-p1-nss-keys.patch do rpm de origem vinculado na resposta anterior.Apenas algum tempo depois, após o lançamento do OpenSSH 5.4p1 com o suporte a certificados, foi decidido fazer o backport desse recurso específico (no changelog datado de 2013) e houve um conflito com o switch existente (
ssh-keygen
agora está usando todas as letras do alfabeto se Lembro-me bem) e a única maneira de fazer backport desse recurso era mover a opção para um switch diferente (os cenários existentes não podiam ser quebrados com uma pequena atualização) e documentá-lo.E essa é toda a história.