我正在致力于标准化我们环境中的不同位,作为其中的一部分,我想转向基于 ssh 密钥的身份验证。
目前,我们在每个服务器上都有单独的帐户(大约 150-200 个),幸运的是,我们在大多数服务器上保持 uid/gid/用户名相同。当有人加入或离开公司时,在每个主机上添加/删除用户会变得很困难。通常,每个团队都有一个软件帐户,团队成员通过输入帐户密码以软件帐户的身份通过 ssh 连接到服务器。
为了简化我们的管理,我将在环境中引入 puppet,并希望使用 ssh_authorized_key puppet 资源使用用户的公钥来更新软件帐户授权密钥文件。
根据我的理解,这将是这样的:
ssh_authorized_key {'Ram': 用户 => '', 类型 => 'ssh-rsa', 密钥 => '', }
ssh_authorized_key {'Shyam':用户 => '',类型 => 'ssh-rsa',密钥 => '',}
那么,如何确保特定用户的所有服务器上的公钥都相同?例如,如果用户“Ram”尝试从任何服务器 ssh 到服务器“hostA”,则应使用相同的公钥-私钥对。
关于如何维护,您有什么建议吗?如果有什么不清楚的地方,请告诉我。提前致谢。
-内存
答案1
您需要使用 SSH 代理转发。基本上,您需要创建一个文件~/.ssh/config
,在其中添加:
Host host
ForwardAgent yes
这告诉 SSH 它将把当前会话的身份验证信息传递到下一个服务器。因此用户的私钥将保留给自己,并使用它连接到第一个服务器。
如需更完整的指南,请查看https://developer.github.com/v3/guides/using-ssh-agent-forwarding/。
答案2
您有所有用户公钥的副本吗?编写一个脚本来为每个用户的凭证运行 ssh-copy-id 应该相对简单。
答案3
您需要确保在用户想要通过 SSH 进入的每台机器上都创建了该用户。
另一方面,密钥并不特定于用户。您只需向他们想要以 ssh 身份登录的任何用户“~/.ssh/authorized_keys”添加公钥即可。您可以将相同的密钥添加到 root、ec2-user、“joe”等。