我对一些基于 ssh 密钥的身份验证感到困惑。
假设我有:
Host A:
user tom
.ssh
tom_private_key
tom_public_key
Host B:
user shared
.ssh
shared_private_key
shared_public_key
我想以用户身份从主机 A 通过 SSHshared
进入主机 B。
我是否必须将shared
用户的私钥复制到我的 ssh 目录,然后使用 -I 参数或设置 SSH 配置文件,以便当我以用户身份 ssh 到该主机时shared
,shared
使用用户的私钥?
有没有办法在不复制私钥的情况下做到这一点?我不这么认为,但如果可以的话,我显然想避免复制私钥。
答案1
您需要~/.ssh/authorized_keys
在主机 B 上的文件中填充您希望有权访问共享帐户的所有用户的公钥。只有客户端才需要用户的私钥。服务器只需要知道允许连接到给定帐户的公钥。
用户很少需要共享私钥(众所周知的 Vagrant 私钥是一个例外),也很少需要将用户的私钥放在服务器上。每个私钥对于每个用户来说都应该是唯一的,并且应该保留在其客户端计算机上。即使您忽略了这一最佳实践,您仍然不需要将共享用户的私钥放在服务器上;您只需将私钥的副本分发给将使用该密钥连接到共享帐户的每个用户。
答案2
在主机 A 上执行以下操作:
cat ~tom/.ssh/tom_public_key | ssh shared@host-b 'cat >> .ssh/authorized_keys'
让我们来做一下(再次在主机 A 上):
ssh -i ~tom/.ssh/tom_private_key shared@host-b
在第一行中,你将 Tom 的公钥从主机 A ( host-a:~tom/.ssh/tom_public_key
) 复制到主机 B 并放入共享用户的 authorized_keys 文件 ( host-b:~shared/.ssh/authorized_keys
) 中,然后你就可以无需密码从 A 连接 (第二行) 到 B:
您可以在 authorized_keys 文件中拥有多个公钥(每行一个),并将同一个公钥用于多个远程主机。您还可以在多台机器上使用同一个私钥,但我认为这是不好的做法。
答案3
如果您从笔记本电脑通过 SSH 连接到主机 A,则可以在本地存储私钥并使用代理转发(ssh -A host_a)。