当我尝试使用包含公钥的受信任证书通过 ssh 连接时,TTY 分配出现问题。
如果我与用户执行经典的 ssh 访问,例如ssh -i test-key-for-vault -o IdentitiesOnly=yes -t bob@<server-ip>
一切正常,但如果我尝试使用受信任的证书来执行此操作,例如通过在文件底部输入/etc/ssh/sshd_config
(这是默认的)
TrustedUserCAKeys /etc/ssh/lgt-trusted-user-ca-keys.pem
Match User bob
AllowTcpForwarding yes
PermitTTY yes
AuthorizedPrincipalsFile /etc/ssh/bob_principals
然后使用命令
ssh -i test-key-for-vault-rsa -o CertificateFile=signed-cert-rsa.pub -o IdentitiesOnly=yes bob@<server-ip>
我可以登录,但看不到我的正常 shell(即它通常在命令行上显示的服务器名称和用户名bob@ip-xxx-xxx-xxx:/home/bob
)
如果我尝试强制分配-t
:
ssh -i test-key-for-vault-rsa -o CertificateFile=signed-cert-rsa.pub -o IdentitiesOnly=yes -t bob@<server-ip>
我明白了
PTY allocation request failed on channel 0
一些背景细节:
- 我正在尝试使用 hashicorp/vault 作为“事实来源”来生成证书
- 我在 ubuntu 22.04 服务器上使用 ssh
- 我已经尝试了可以通过谷歌搜索找到的主要建议,例如:
- 尝试输入
PermitTTY yes
并PermitTTY no
- 尝试输入指令
none /dev/pts devpts defaults 0 0
i /etc/fstab 并重新启动系统
- 尝试输入
有人有什么建议吗?我还可以做其他检查吗?
答案1
我发现错误不是出在服务器端,而是出在我生成证书的方式上。
例如,尝试手动生成签名的证书它是有效的!
我已经使用命令
ssh-keygen -s ca_ssh_key -I "$(date)" -n bob -V +1h test-key-for-vault-rsa.pub
生成有效签名。通过分析ssh-keygen -Lf testcert.pub
,结果显示:
testcert.pub:
Type: [email protected] user certificate
Public key: ED25519-CERT SHA256:4VHKC6rJCp7/dI6MkL8vxUPAMEWyWEbJ4J3KgnrgT/Q
Signing CA: RSA SHA256:ipiIb0Alzu1W38SiwvMWO6VEcYtBK6KgNHmRJcxcQiE (using rsa-sha2-256)
Key ID: "vault-userpass-bob-e151ca0baac90a9eff748e8c90bf2fc543c03045b25846c9e09dca827ae04ff4"
Serial: 4538299703429475958
Valid: from 2023-06-02T12:24:09 to 2023-06-02T13:24:39
Principals:
bob
Critical Options: (none)
Extensions:
permit-agent-forwarding
permit-pty
带来了“扩展”的存在。
我使用的生成证书的工具没有包含此部分,这就是它不能按我预期工作的原因。
我希望它对其他人也有用。