Digamos que minha organização tenha um domínio example.com
e um servidor executando uma versão recente do Ubuntu com o nome myserver.example.com
. Digamos também que eu esteja em uma máquina Windows capaz de alcançar o servidor na porta 22. Quero usar putty para ssh para este servidor.
Na primeira vez que eu conectar, verei uma mensagem de aviso como esta:
A partir daqui, posso conectar uma vez e continuar a ver o erro no futuro, aceitar a chave do host para que ela seja confiável no futuro ou cancelar, já que não posso validar a identidade do servidor com certeza.
Agora, digamos que eu também tenha um certificado curinga *.example.com
emitido por uma grande CA de confiança pública, como DigiCert, Comodo, GlobalSign, etc., e dentro myserver.example.com
da lista de nomes alternativos de assunto (SAN).
Como eu poderia instalar o certificado no servidor para que ele seja usado para a assinatura de conexão ssh (não autenticação de usuário — isso será separado!) e confiável pelo computador cliente, para que esse aviso não seja exibido? Quais atributos precisam ser incluídos com o certificado que podem não ser incluídos de fábrica?
Parece que você deseja uma PKI para SSH:
O problema é que o OpenSSH não pode usar o X.509 PKI . O RFC 6187 declara a maneira de dar suporte a isso, mas o OpenSSH padrão não o implementa. Existem builds não oficiais de Roumen Petrov que incluem esse suporte, e eles podem realmente usar certificados X.509.
Em vez disso, o OpenSSH define sua própria forma ad-hoc de PKI (veja
man ssh-keygen
para mais detalhes).Minha experiência mais "mágica" com isso, no entanto, foi DNSSEC como um PKI e SSHFP DNS RRs para publicar chaves. Nesse caso, clientes em conformidade não perguntarão isso, exatamente como você quer. O PuTTY não oferece suporte; o recurso de cliente OpenSSH integrado do Windows oferece (desde o Windows 10 e o Windows Server 2016, AFAIK). Mas, como @dave_thompson_085 mencionou em seu comentário, boa sorte configurando-o com a estação de trabalho do Windows; nunca tentei, minhas estações de trabalho são todas Linux.
Em um sentido prático, a maneira mais acessível e fácil é distribuir chaves de host e/ou chaves de assinatura de PKI SSH para clientes usando um sistema de gerenciamento de configuração como o Ansible.
Vejo uma maneira indireta de fazer bootstrapping não muito manual de um certificado HTTPS para o PuTTY:
faça com que seu servidor web sirva (por HTTPS) a(s) chave(s) pública(s) SSH do host. A maneira mais simples é copiar o(s) arquivo(s) .pub ou apenas o(s) valor(es) blob de /etc/ssh para algum lugar apropriado em seus dados web. Dependendo do seu servidor e configuração, pode ser possível fazer com que o servidor acesse o arquivo /etc/ssh diretamente, mas fazer isso sem cuidado suficiente pode criar vulnerabilidades que permitem que dados secretos importantes vazem, e eu não arriscaria.
use qualquer ferramenta HTTPS no seu cliente para baixar de forma verificável o(s) valor(es) .pub -- o Windows mais recente tem
curl
o padrão, praticamente qualquer Windows tem o PowerShellInvoke-Webrequest
ou o vbscriptXMLHTTP
.execute
putty
(pelo menos uma vez) com-hostkey x
contendo o blob de chave pública desejado, ou executeplink -batch -hostkey x
um comando fictício que deve atualizar o registro de forma semelhanteNão pode. Ssh não usa TLS. O modelo de segurança padrão é confiança no primeiro uso.
O que você pode fazer é publicar a chave.