SSH 公钥认证 - 一个公钥可以用于多个用户吗?

Luk*_*bby 2 ssh kickstart users

我想使用 Kickstarts 部署 RHEL5 服务器,为了安全起见,我只想允许远程客户端以用户“开发人员”的身份通过 ssh 连接到服务器(我已经将 sshd 配置配置为禁用 root 访问)。我有几个关于设置的问题:

  • 登录服务器时,是否需要在每台客户端计算机上都有名为“Developer”的本地用户?(我不认为是这样,但我想我会在我做的时候确认)
  • 在部署服务器之前,我是否可以只为每个客户端的 RSA 公钥设置一个包含一个条目的 authorized_keys 文件?用户实际输入的内容是否重要ssh -p 22020 Developer@server(即这是否会影响 authorized_keys 文件中所需的任何信息?)
  • 客户端的 known_hosts 文件中是否需要服务器的公钥(我希望每次都能正常工作而不会被提示输入任何内容)?
  • 用户“开发人员”是否需要一个带有 ~/.ssh 的主目录,或者我可以使用来自不同目录的密钥配置 sshd 服务器吗?(开发者用户不需要访问主目录中的任何信息,只需访问名为“/var/Tasks”的文件夹中的文件?

Ale*_*lst 10

首先,仅允许用户使用“开发人员”的用户名进行连接没有任何安全优势。如果您希望用户对同一组文件具有共享访问权限,请将它们放在同一个 UNIX 组中,并使 /var/Tasks 归该组所有。单独的用户名允许审计、更好的故障排除等。

至于你的其他问题:

  • 客户端用户名并不重要。连接时,用户可以指定他们想要使用的远程用户名:ssh username@example.com
  • 您可以使用与磁盘空间一样多的用户密钥来填充 authorized_keys,并且您可以在部署服务器之前执行此操作。此外,无论 sshd 正在侦听哪个端口号,都会读取相同的 authorized_keys 文件。
  • 是的,服务器的公钥将存储在 known_hosts 中,第一次连接提示用户接受远程密钥。这部分是使 SSH 能够检测中间人攻击的原因,如果用户盲目接受任何密钥,SSH 就容易受到中间人攻击。如果您对客户端机器有足够的访问权限,则可以将远程服务器密钥指纹添加到每个客户端的 known_hosts。这是您可以避免此提示的唯一方法。
  • 您可以在 sshd_config 中使用 AuthorizedKeysFile 关键字来指定您希望 sshd 在服务器上查找密钥的位置。我把密钥放在/etc/ssh/keys/%u%u 是一个带有用户名的文件中,我确保用户只有读访问权限。