非复制/粘贴基于公钥的 SSH 身份验证

非复制/粘贴基于公钥的 SSH 身份验证

我想删除手动将公钥复制到每个服务器以授予访问权限的过程。

我在这里试图解决的主要问题是:

  • 有多个云提供商的多台服务器。
  • 每当有新人加入团队时,我们都必须将他们的公钥复制到所有服务器,以便他们可以登录。
  • 这个过程是重复和繁琐的,我想用某种自定义的身份验证机制来删除这个复制粘贴部分。

我调查过:

  • 基于Google身份验证器的ssh身份验证

    • 这需要在所有服务器上设置环境以便它可以工作,这很好,但是所有服务器都有自己的密钥,用户必须逐个为所有服务器注册。
    • 此外,Google Authenticator 应用中将存在多个 TOTP,每个服务器一个,这可能会造成混乱,而且体验看起来也不好。
    • 如果令牌匹配部分可以以某种方式卸载到中央服务器,并且 ssh 服务器只需将令牌传递给该服务器,那么此方法就可以起作用。
  • 我在 Azure 服务器上看到了这种情况:对于 Azure 服务器,如果启用了基于 Azure 的登录,那么每当用户尝试登录服务器时(在终端中执行 ssh 命令后),都会打开浏览器并要求用户在其中输入电子邮件和密码,成功登录后,将向他们提供令牌。然后,用户必须将令牌输入终端才能访问服务器。

    • 我试图找出这项技术的名称以及是否有免费版本可用?
  • 创建一个有密码的 Linux 用户,然后在团队中共享用户名/密码,以便他们可以使用。然后可以在 Lastpass 上共享用户名和 IP。这种方法对审计没有帮助,但它可以工作,我把它作为最后的手段。

谢谢!

答案1

  1. 你好,如果我理解了您的问题,我认为可以通过使用 OpenSSH 安全文件复制scp命令创建一个简单的脚本来解决它。

  2. 如果整个团队都需要对相同的服务器拥有相同的权限,那么我的建议是:

    • 在您自己的计算机中创建一个authorized_keys文件。
    • 根据团队的需要手动更新该文件。(可以使用一个脚本来执行这两项操作)。
  3. 创建一个脚本来自动将更新的authorized_keys从您的计算机复制到您的服务器:

    • scp需要服务器权限才能运行,这就是为什么脚本应该从您或任何其他管理员计算机运行。
  4. 在您的机器上找到该脚本/usr/local/sbin/.,可以选择从您电脑上的任何目录运行该脚本。

  5. 通过命令赋予脚本执行权限chmod a+x /usr/local/sbin/scriptName

    • 剧本:
#/bin/bash!

read -p "Please Enter Path:" -r r1

scp  $r1 username@serverip:/home/username/.ssh/authorized_keys
#scp $r1 username@serverip:/home/username/.ssh/authorized_keys
#scp $r1 username@serverip:/home/username/.ssh/authorized_keys
#add more servers if needed....
#you could also use a switch to use which servers are relavent for the new user.

请注意,如果您出于安全或其他原因在其他端口上运行 ssh 服务,则应运行scp带有选项的命令-P

scp -P sshPort $r1 username@serverip:/home/username/.ssh/authorized_keys

在我自己的服务器上运行的脚本的示例图: 在此处输入图片描述

  1. 正如我之前所说,您可以使脚本更好,并通过“开关”添加一些过滤器来选择您想要添加密钥的服务器。
  2. 如果情况像您所说的那样简单,并且加入的每个团队成员都需要所有服务器的权限,那么这个解决方案应该可行。

希望这能对你有所帮助。

如果有任何不明白的地方或者需要更多帮助,请发表评论。

相关内容