是否可以将 Web 应用程序的登录信息挂接到 SSH 服务器?我希望能够访问挂接到 SSH 用户组的 Web 控制面板。他们可以使用与普通 SSH 帐户相同的密码登录控制面板。它不需要为他们提供 SSH 访问权限 - 只需进行用户名/密码验证即可。理想情况下,当他们访问控制面板时,它可以使用他们的 SSH 密钥自动登录,但我对此是否可行表示怀疑。
答案1
在很大程度上,您的问题可以理解为:我希望我的 Web 应用程序能够根据系统用户数据库(/etc/passwd
、/etc/shadow
和/etc/group
)对用户进行身份验证,就像 SSH 一样。Linux 系统身份验证层的术语是 PAM,即可插入身份验证模块。
最快的方法可能是配置 Apache 以提供 PAM 支持。一种方法是运行验证码和mod_authnz_externalApache 配置看起来类似于:
DefineExternalAuth pwauth pipe /usr/sbin/pwauth
<Directory /var/www/yourapp>
AuthType Basic
AuthName "Your app requires authentication"
AuthBasicProvider external
AuthExternal pwauth
# any valid username/password is allowed access
Require valid-user
## Only bob and sarah allowed
# Require user bob sarah
## Only the members of the group yourappusers are granted access
# Require group yourappusers
</Directory>
在较大的环境中,基于本地文件的用户身份验证通常会被中央用户目录(通常是 LDAP 目录)取代。在系统级别,这是一个更改 PAM 配置的问题,之后所有需要身份验证的应用程序都会立即识别 LDAP。
有一架阿帕奇LDAP 模块尽管大多数应用程序通常都支持 LDAP 身份验证,而不是依赖 Apache,但这样做也同样有效。这样还可以使用“注销”按钮等功能,而 Apache 身份验证则不具备此功能。
SSH 密钥特定于 SSH 协议,尽管您可能会发现在 Web 应用程序中重建该功能是一项有趣的挑战,但您应该知道,Web 应用程序中常用的 SSH 公钥认证的大致等效项是部署 SSL 客户端证书。
答案2
如果您确实需要 SSH 提供的加密,您可以执行以下操作:
让 Apache 只在运行 SSHd 的服务器上监听 localhost。如果你想保证安全,就不需要做其他事情了。然后,你只需创建一个到服务器的 SSH 隧道,它会重定向到 Apache 正在监听的端口。
可以这样做:(适用于 OS X)ssh -L 8080:127.0.0.1:80 [email protected]
建立连接后,您只需在远程(客户端)机器上的浏览器中转到 localhost:8080 并访问网页即可。