假设我有 5 个用户和 100 台启用了远程 shell 的 Linux 机器。我该如何设置环境以允许这几个用户使用相同的凭据登录到任何一台机器?
答案1
设置 LDAP 域
通过使用 LDAP 域,对任何计算机的每个身份验证请求都会重定向到域控制器。据我所知,如果您已经有一个活动 Windows 域,某些 Linux 发行版可以加入该域。这样,您就可以完全集中控制网络中的所有用户。您可以从一台机器上立即添加和删除用户。
优点:
- 最容易维护
- 用户管理立即生效
- 如果您的公司已经有一个活跃的域名,那么这非常有用且便宜
- 与常见的域管理软件集成(例如,如果您使用 Windows)
缺点:
- 如果 LDAP 控制器未集群,则会出现单点故障,因此您必须考虑更多服务器
- (续)LDAP 和集群的额外服务器使解决方案更加昂贵
- 如果您没有正在运行的域控制器,则设置起来会稍微困难一些
据我所知你不能使用公钥认证
从集中式机器分发 SSH 密钥
当你想使用公钥进行更强大的身份验证时,这非常有用。你可以将所有用户的密钥上传到一个运行 Cron 作业的盒子上scp
,该作业会以一定的时间间隔将公钥发送到正确的主目录
优点:
- 容错。任何数量的服务器都可能崩溃,但可用的机器不会受到影响
- 设置起来最简单、最便宜
缺点:
- 如果您有超过“五个”用户,即您正在大型企业网络上工作,那么用户管理将非常困难
- (接上文)必须为每个服务器执行用户创建、删除等操作,通常使用复制命令的脚本
- 如果不手动运行脚本,公钥将会延迟更新
将主目录挂载到共享网络驱动器(NFS、SSHFS……)上
这样做的好处是可以实时修改公钥(因为它们总是从网络共享中读取)。此外,如果你创建了/etc/shadow
指向共享驱动器的符号链接,你就可以从控制器实时管理用户
优点:
- 除了实时修改外没有太多
- 整个主目录在服务器之间共享(它通常很方便,相信我......)
缺点:
- 与 LDAP 域一样具有容错能力。您需要复制主目录,否则无法进行身份验证
- 比这两种解决方案的设置和维护都更棘手
答案2
下面是一个大型组织使用 Puppet 和 SSH 密钥执行此操作的方式。puppetmaster 为每个用户分配用户帐户、ssh 设置目录,并为每个用户设置密码。
http://itand.me/using-puppet-to-manage-users-passwords-and-ss
这可以在任何配置管理系统中复制,而不仅仅是 Puppet。