Configurei a autoridade de certificação SSH em meu servidor, incluindo uma chave de host assinada com os principais aplicáveis. Eu configurei meu arquivo known_hosts
local para reconhecer a autoridade de certificação e quando eu ssh diretamente no host ele funciona bem. No entanto, eu também configurei um túnel reverso no host para o SSH nele através de uma VM que eu configurei. Não consigo descobrir como fazer com que meu cliente SSH o reconheça como um host conhecido, apesar de uma string apropriada na chave do host assinado. Como faço para assinar a chave do host ou configurar a entrada known_hosts para reconhecer o host durante o tunelamento através de terceiros?
Esta é a linha apropriada do known_hosts
:
@cert-authority *.DOMAIN.us ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRd5kjlix8PN1SsQ...
Este é o ssh-keygen -L
da chave do host:
pi@ca51-1:~ $ ssh-keygen -L -f /etc/ssh/ssh_host_ecdsa_key-cert.pub
/etc/ssh/ssh_host_ecdsa_key-cert.pub:
Type: [email protected] host certificate
Public key: ECDSA-CERT SHA256:at+6J0W9S0BZj96YeJqtUCAAksUFu8P840ZCkVm9fb0
Signing CA: RSA SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g
Key ID: "ca51-1.in"
Serial: 9
Valid: forever
Principals:
ca51-1.local
ca51-1.in.DOMAIN.us
[tunnel.in.DOMAIN.us]:10030
Critical Options: (none)
Extensions: (none)
Quando tento conectar-me ao servidor localmente ( ssh [email protected]
), conecto sem problemas. (Acabei de perceber que *.local
não está no meu arquivo known_hosts
, apesar de estar funcionando.)
Observe que eu tenho o endereço do túnel: port como principal ( [tunnel.in.DOMAIN.us]:10030
).
Quando tento ssh no servidor através desse túnel, recebo um erro:
ssh -p 10030 [email protected]
key_cert_check_authority: invalid certificate
Certificate invalid: name is not a listed principal
The authenticity of host '[tunnel.in.awosome.us]:10030 ([138.68.10.xxx]:10030)' can't be established.
ECDSA key fingerprint is SHA256:at+6J0W9S0BZj96YeJqtUCAAksUFu8P840ZCkVm9fb0.
Aqui estão mais algumas depurações de -v
:
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host certificate: [email protected] SHA256:at+6J0W9S0BZj96YeJqtUCAAksUFu8P840ZCkVm9fb0, serial 9 ID "ca51-1.in" CA ssh-rsa SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g valid forever
debug1: checking without port identifier
debug1: Host 'tunnel.in.awosome.us' is known and matches the ECDSA-CERT host certificate.
debug1: Found CA key in /Users/jshannon/.ssh/known_hosts:31
key_cert_check_authority: invalid certificate
Certificate invalid: name is not a listed principal
Para confirmar que eu não cometi um erro com known_hosts
, copiei a chave na linha 31 ( ssh-rsa ....
), colei em uma arquivo temporário e, em seguida, executei ssh-keygen -l
:
ssh-keygen -l -f temp_keys/key.pub
2048 SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g AWOS (RSA)
Pensei que talvez o formato do host em principals
estivesse incorreto, mas se eu aceitar o host desconhecido, recebo a chave adicionada a known_hosts
:
[tunnel.in.DOMAIN.us]:10030,[138.68.10.xxx]:10030 ecdsa-sha2-nistp256 AAAAE2VjZHNhLX
A primeira entrada corresponde à entrada nos principais, até o formato e o número da porta.
Eu tentei várias iterações de principals
entradas sem sucesso. Idealmente, eu gostaria de ter uma entrada principals que bloqueia o host para um FQDN ( tunnel.in.DOMAIN
) e porta, mas eu estaria OK qualquer porta nessa máquina. Eu também tentei alguns asteriscos lá.