我想对我的 SSH 会话使用智能卡身份验证。现在有时我想在 ssh 会话中使用 ssh 客户端。所以这种情况:
我的带有智能卡的台式计算机与 shell.provider.com 有一个 ssh 会话。从 shell.provider.com 我有一个到 shell.provider2.com 的 ssh 会话(我有时称这种情况为“跳过”)
我的智能卡已插入台式计算机。是否可以(以任何方式)使用智能卡身份验证登录 shell.provider2.com?
我想对我的 SSH 会话使用智能卡身份验证。现在有时我想在 ssh 会话中使用 ssh 客户端。所以这种情况:
我的带有智能卡的台式计算机与 shell.provider.com 有一个 ssh 会话。从 shell.provider.com 我有一个到 shell.provider2.com 的 ssh 会话(我有时称这种情况为“跳过”)
我的智能卡已插入台式计算机。是否可以(以任何方式)使用智能卡身份验证登录 shell.provider2.com?
您可以使用ssh-agent添加智能卡,然后将代理转发到另一台主机。这将允许您使用本地智能卡在第二台主机上进行身份验证。简而言之:
eval `ssh-agent` # if the agent is not running yet
ssh-add -s /path/to/pkcs11.so # probably /usr/lib64/opensc-pkcs11.so
# or Ubuntu: /usr/lib/x86_64-linux-gnu/pkcs11/opensc-pkcs11.so
# enter your pin
ssh-add -l # should list your smartcard
ssh -A shell.provider.com # should not prompt for pin
ssh shell.provider2.com # from the shell.provider.com
智能卡的解决方案可以是
您可以通过使用主机 B 的配置来为此使用专用配置~/.ssh/config,或者将其用作 ssh 调用中的参数。
Host B
Hostname <the-real-hostname-for-B>
User <user>
Port 22
ProxyCommand ssh -p 22 -q -W %h:%p <the-real-hostname-for-A>
一个优点是您将拥有主机的别名并且还具有代码完成功能(更少的输入)
ssh <user>@B
注意:代理转发在共享机器上是一种不好的做法,因为通过环境变量 SSH_AUTH_SOCK 劫持您的代理非常容易,因此攻击者可以接管您的身份和身份验证机制以跳转到其他主机。
当使用 yubikeys 作为您的智能卡时,您可以使用在需要登录等加密操作时需要物理触摸智能卡的功能。这样,攻击者还需要物理访问您的智能卡,从而在大多数情况下阻止攻击。