在其他应用程序中使用ssh密钥进行身份验证?

时间:2015-08-09 16:07:52

标签: unix authentication ssh-keys

假设我想为简单的网络服务设置穷人的身份验证方案。

我不想打扰用户名/密码身份验证,为简单起见,我只想在我的应用程序中有一个公钥列表,任何能证明他们是该密钥的所有者的人都可以使用我的服务。

出于我的应用程序的目的,它将极大地简化身份验证过程,因为我的所有用户都在本地网络上并且他们都使用Unix。无论何时我登上新用户,我都可以向他们询问他们的ssh公钥。

是否有一种简单的方法可以在非ssh应用程序中重用ssh公钥认证中涉及的机制?这个问题旨在与语言无关。

3 个答案:

答案 0 :(得分:2)

如果您只有一个可以使用您的应用程序的用户列表,而您无需查看谁做了什么。

您可以设置服务器,使其仅侦听localhost(127.1)而不是0.0.0.0,并提供受限制的sshd,转发连接到应用程序所需的端口

~/.ssh/authorized_keys将提供可以使用的授权密钥列表。

 ssh -I private_key_file <hostname> -L 3000:localhost:3000

有关配置sshd的基本设置和帮助,请查看以下答案: https://askubuntu.com/questions/48129/how-to-create-a-restricted-ssh-user-for-port-forwarding

注意:请注意,如果您没有将其锁定,任何用户都可以在托管计算机的机器上拥有完全的shell访问权限。

答案 1 :(得分:2)

我头脑中的一个肮脏的黑客:你可以包装应用程序,以便它可以创建一个从localhost到你的服务器的实际SSH隧道,并将其用于?

答案 2 :(得分:1)

假设您正在谈论基于Web的应用程序。您真正需要的是X.509客户端证书(1.3.6.1.5.5.7.3.2)。这样您就可以单独为您的应用程序识别用户。

这些问题面临着在查看密钥分发时通常会遇到的相同问题。这通常被认为是一个难题。

如果您想沿着这条路走下去,那就是您需要做的事情。

  • 生成根证书(一次)
  • 使用适当的模块设置Web服务器以解析证书(nginx / apache)
  • 为每个用户生成证书(openssl)
  • 从中央服务器下载cerificiate。 (也许在这里使用他们的ssh pub键)
  • 在本地安装x509证书(操作系统相关)

在服务器端,您需要将证书作为Web服务器的一部分进行处理(nginx或apache应该有模块来执行此操作),然后将该名称作为标题字段传递给您的应用程序,然后您可以处理该字段内部。

这是一个比用户名和密码更好的安全解决方案,但由于密钥分发问题,这种解决方案很复杂。大多数人都不会打扰,因为在大多数应用程序中,将登录与LDAP或半径集成起来很容易。