Я установил центр сертификации SSH на своем сервере, включая подписанный ключ хоста с применимыми участниками. Я установил свой местный known_hosts
файл для распознавания центра сертификации, и когда я отправляю ssh прямо на хост, он работает нормально. Однако я также настроил на хосте обратный туннель для подключения к нему SSH через виртуальную машину, которую я настроил. Я не могу понять, как заставить мой SSH-клиент распознавать его как известный хост, несмотря на соответствующую строку в подписанном ключе хоста. Как мне подписать ключ хоста или настроить запись known_hosts для распознавания хоста при туннелировании через третье лицо?
Это подходящая строка из моего клиента known_hosts
:
@cert-authority *.DOMAIN.us ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDRd5kjlix8PN1SsQ...
Вот ssh-keygen -L
для ключа хоста:
pi@ca51-1:~ $ ssh-keygen -L -f /etc/ssh/ssh_host_ecdsa_key-cert.pub
/etc/ssh/ssh_host_ecdsa_key-cert.pub:
Type: ecdsa-sha2-nistp256-cert-v01@openssh.com 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)
Когда я пытаюсь подключиться к серверу локально (ssh pi@ca51-1.local
) Подключаюсь без проблем. (Я только что заметил, что *.local
не в моем known_hosts
файл, несмотря на то, что он работает.)
Обратите внимание, что у меня есть адрес туннеля: порт в качестве основного ([tunnel.in.DOMAIN.us]:10030
).
Когда я пытаюсь подключиться к серверу по ssh через этот туннель, я получаю сообщение об ошибке:
ssh -p 10030 pi@tunnel.in.awosome.us
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.
Вот еще отладка из -v
:
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host certificate: ecdsa-sha2-nistp256-cert-v01@openssh.com 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
Чтобы подтвердить, что я не ошибся с known_hosts
Я скопировал ключ в строке 31 (ssh-rsa ....
), вставил его во временный файл и запустил ssh-keygen -l
:
ssh-keygen -l -f temp_keys/key.pub
2048 SHA256:AYPOCzb67UvUUIoULa3BgstmX1XIDP9+4bClTycMC9g AWOS (RSA)
Я подумал, что возможно формат хоста в principals
был неверным, но если я принимаю неизвестный хост, я добавляю его ключ в known_hosts
:
[tunnel.in.DOMAIN.us]:10030,[138.68.10.xxx]:10030 ecdsa-sha2-nistp256 AAAAE2VjZHNhLX
Первая запись совпадает с записью в принципалах, вплоть до формата и номера порта.
Я пробовал несколько итераций principals
записи без успеха. В идеале я хотел бы иметь запись о принципалах, которая блокирует хост до полного доменного имени (tunnel.in.DOMAIN
) и порт, но я буду в порядке с любым портом на этой машине. Я тоже пробовал там звездочки.