Почему ssh-agent не пересылает мой SSH-сертификат?

Эта ветка является ответом на озаглавленный вопрос: Почему ssh-agent не пересылает мой сертификат SSH? На самом деле я не смог найти никакой информации во время поиска. Мне пришлось читать C-код ssh-add решить мою проблему..

Проблема

Я получил действующий сертификат SSH:

$ ssh-keygen -L -f ~/.ssh/id_rsa-cert.pub 
/home/user/.ssh/id_rsa-cert.pub:
    Type: [email protected] user certificate
    Public key: RSA-CERT SHA256:YgFzKPkUdZHLLi8bEKUs5/hLumNoMNG+oDJ+KD6mS3s
    Signing CA: RSA SHA256:w+Cjpu/QQUunuojs9Af82ENdBUreCDXo+APao9X4dHw
    Key ID: "user_key"
    Serial: 0
    Valid: from 2017-12-06T10:53:00 to 2017-12-07T10:54:57
    Principals: 
            user
            admin
    Critical Options: (none)
    Extensions: 
            permit-X11-forwarding
            permit-agent-forwarding
            permit-port-forwarding
            permit-pty
            permit-user-rc

Это мой список ключей ssh-agent:

$ ssh-add -l
4096 SHA256:YgFzKPkUdAGBPi8bEKUs5/hLumNoAds+oDJ+KD6mS3s user_key (RSA)

Когда я SSH на удаленном сервере, он работает. У меня нет ~/.ssh/authorized_keys, и мой ключ, вероятно, хорошо переадресован, потому что я получил тот же предыдущий результат.

Теперь я хотел бы подключиться по SSH к другому серверу с первого (с ForwardAgent yes):

$ ssh srv1
srv1:~$ ssh srv2 -vvv
...
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: user_key
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
...
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
srv1:~$ 

Что я сделал не так ?


person Nicolas Beguier    schedule 06.12.2017    source источник
comment
Вы должны опубликовать часть ответа как ответ на этот вопрос (и удалить ее из самого вопроса)   -  person Marki555    schedule 06.12.2017


Ответы (1)


На самом деле, ssh-agent плохо воспринял мой SSH-сертификат. Мы видим, что это RSA, а не RSA-CERT. Как импортировать сертификат в ssh-agent?

У вас должно быть 2 пары ключей (важно расположение и название):

  • Original RSA couple :
    • Private Key : ~/.ssh/example_key
    • Открытый ключ: ~/.ssh/example_key .pub
  • RSA Certificate :
    • Private Key/Certificate : ~/.ssh/example_key -cert
    • Открытый сертификат: ~/.ssh/example_key -cert.pub

Затем импортируйте исходную пару:

$ ssh-add ~/.ssh/example_key
Enter passphrase for /home/user/.ssh/example_key: 
Identity added: /home/user/.ssh/example_key (/home/user/.ssh/example_key)
Certificate added: /home/user/.ssh/example_key-cert.pub (user)

Сертификат добавляется автоматически.

Затем агент SSH пересылает его без проблем. Между тем невозможно удалить из агента исходную пару ключей RSA без удаления сертификата SSH.

$ ssh-add -l
4096 SHA256:YgFzKPkUdAGBPi8bEKUs5/hLumNoAds+oDJ+KD6mS3s user_key (RSA)
4096 SHA256:YgFzKPkUdAGBPi8bEKUs5/hLumNoAds+oDJ+KD6mS3s user_key (RSA-CERT)
$ ssh srv1
srv1:~$ ssh srv2
srv2:~$ 

Резюме: почему было неправильно и почему?

  • Плохое наименование моих ключей. Моя пара RSA была что-то вроде ~/.ssh/id_rsa_github, а мой сертификат SSH был ~/.ssh/id_rsa-cert.
  • Агент неправильно импортирует мой сертификат и рассматривает его как личность, а не как сертификат.
  • Во время первого соединения SSH агент предоставляет сертификат как идентификатор, но он может договориться с удаленным сервером openssh (я действительно не знаю, почему). Во время второго SSH-подключения он не смог...

Будьте также осторожны с этим:

  • Добавьте permit-agent-forwarding в расширения сертификата
  • Поместите ForwardAgent yes в конфигурацию клиента SSH.

Наконец, для подписи сертификатов я использую CASSH.

person Nicolas Beguier    schedule 06.12.2017
comment
Спасибо! Это сработало. У меня есть одно предложение - уточнить соглашение об именах для сертификата. Это работает, только если вы добавите -cert.pub в конец файла сертификата. Вы поместили это там с пробелом, но не упомянули четко. - person Teddy Belay; 23.05.2018