为什么ssh-agent不转发我的SSH证书?

Nic*_*ier 2 ssh certificate ssh-agent

该线程是对标题问题的答复:ssh-agent为什么不转发我的SSH证书? 实际上,我在搜索过程中找不到任何信息。我必须阅读ssh-add的C代码 才能解决我的问题。

问题

我获得了有效的SSH证书:

$ ssh-keygen -L -f ~/.ssh/id_rsa-cert.pub 
/home/user/.ssh/id_rsa-cert.pub:
    Type: ssh-rsa-cert-v01@openssh.com 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
Run Code Online (Sandbox Code Playgroud)

这是我的ssh-agent键列表:

$ ssh-add -l
4096 SHA256:YgFzKPkUdAGBPi8bEKUs5/hLumNoAds+oDJ+KD6mS3s user_key (RSA)
Run Code Online (Sandbox Code Playgroud)

当我在远程服务器上进行SSH时,它可以工作。我没有~/.ssh/authorized_keys密码,而且我的密钥可能转发很好,因为我得到了与以前相同的结果。

现在,我想从第一个服务器(使用ForwardAgent yes)通过SSH连接到另一台服务器:

$ 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:~$ 
Run Code Online (Sandbox Code Playgroud)

我做错什么了 ?

Nic*_*ier 5

实际上,ssh-agent并没有很好地接受我的SSH证书。我们可以看到它是一个,RSA而不是一个RSA-CERT。如何在ssh-agent中导入证书?

您必须有2对键(位置和命名很重要):

  • 原始RSA夫妇:
    • 私钥:〜/ .ssh / example_key
    • 公钥:〜/ .ssh / example_key .pub
  • RSA证书:
    • 私钥/证书:〜/ .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)
Run Code Online (Sandbox Code Playgroud)

自动添加证书。

然后,SSH代理可以毫无问题地转发它。同时,无法在不删除SSH证书的情​​况下从代理中删除原始RSA密钥对。

$ 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:~$ 
Run Code Online (Sandbox Code Playgroud)

回顾:为什么错了,为什么?

  • 我的按键命名错误。我的RSA对像是这样~/.ssh/id_rsa_github,我的SSH证书是~/.ssh/id_rsa-cert
  • 代理严重导入了我的证书,并将其视为身份而不是证书。
  • 在第一个SSH连接期间,代理将证书作为身份提供,但是它可以与远程openssh服务器协商(我真的不知道为什么)。在第二个SSH连接期间,它无法...

还要注意以下几点:

  • 添加permit-agent-forwarding证书扩展名
  • 放入ForwardAgent yes您的SSH客户端配置

最后,我使用CASSH签署证书。