使用PGP密钥对进行登录

时间:2020-03-27 07:44:19

标签: authentication ssh gnupg pgp

我在Ubuntu服务器上创建了一个PGP主密钥和一个Authenticate子密钥。对于仍然需要创建的用户testUserX,我希望他(testUserX)使用authenticate子项登录该服务器。

sec  rsa1024/1CA56EBE6E0D128A
     created: 2020-03-27  expires: never       usage: C
     trust: ultimate      validity: ultimate
ssb  rsa1024/7D9558836D7E9E72
     created: 2020-03-27  expires: never       usage: A
[ultimate] (1). admin <admin-test@example.com>

我试图按照我在互联网上找到的一些教程进行操作,但是到目前为止,它们都没有起作用。我有一个Ubuntu 18.04服务器,我的gpg(GnuPG)版本是2.2.4。

有人可以帮我怎么做吗?它必须相当简单,但是我无法对其进行管理。谢谢。

编辑:也许我应该详细说明我到目前为止所做的事情。

在Ubuntu服务器上,我将authenticate子项的公钥导出到~/.ssh/authorized_keys

gpg --export-ssh-key 7D9558836D7E9E72! > 7D9558836D7E9E72.pub.ssh
cat ~/7D9558836D7E9E72.pub.ssh >> ~/.ssh/authorized_keys

然后,我将私钥导出到我的Windows 10计算机并将其导入到那里:

scp ferit@192.168.2.8:~/7D9558836D7E9E72.sub.key C:\Users\ferit\Downloads\
gpg --import 7D9558836D7E9E72.sub.key

所以,问题是:如何通过PGP从Windows 10登录到Ubuntu服务器?

1 个答案:

答案 0 :(得分:0)

我不确定这种方法是否正确,但是也许我误解了一些东西。

想法如下:

  • 系统上的每个用户都可以将其公钥上传到服务器上
  • 完成此操作后,您可以将密钥导入密钥环
  • 然后,当他们要登录时,首先需要输入用户名
  • 然后,服务器将在数据库中获取匹配的密钥ID
  • 然后,您将生成一个随机挑战,该挑战使用用户(以及可选地,您的)的公钥进行PGP加密,因此只有用户(以及可选地,您)才能解密该消息
  • 用户输入对挑战的响应
  • 如果响应与生成的值匹配,则他/她将成功登录。

总而言之,每个用户(即使目前只有一个……)也应该有自己的密钥对,并由他们提供。您没有为他们提供一个密钥,当然也不会与多个用户共享同一密钥。

每个人都将他们的秘密密钥保密,但是公共密钥可以(必须)自由共享。

这是2FA的一种,因此,我相信您会很容易找到此任务的代码示例。但是您没有指定要使用的语言。另外,您并没有确切说明目的。 “登录”是模糊的。目标是登录网站还是某些服务(例如SSH)?实施会因目标而异。

相关问题