如何使用SSH进行Web应用程序login?

是否有可能挂钩的Web应用程序的login到SSH服务器? 我想要访问挂接到SSH用户组的Web控制面板。 他们可以使用与他们正常的SSH帐户相同的密码进行控制面板login。 它不需要给他们SSH访问 – 只需要进行用户名/密码authentication。 理想情况下,它可以使用他们的SSH密钥自动login,当他们访问控制面板,但我怀疑这是可能的。

在很大程度上,您的问题将转化为:我希望我的Web应用程序根据系统用户数据库( /etc/passwd/etc/shadow/etc/group )对用户进行身份validation,就像SSH一样。 Linux系统authentication层的术语是PAM,可插拔authentication模块。

最快的是最有可能configurationApache提供PAM支持。 一个配方是运行pwauth和mod_authnz_external,导致Apacheconfiguration看起来类似于:

 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> 

在较大的环境中,基于本地文件的用户身份validation通常replace为中央用户目录,通常是LDAP目录。 在更改PAMconfiguration的问题的系统级别上,所有需要身份validation的应用程序都可以即时识别LDAP。

还有一个Apache LDAP模块 ,尽pipe通常大多数应用程序本身会支持LDAPauthentication,而不是依靠Apache。 这也允许像“注销”button这样的工作,而这些function在Apache auth中不存在。

SSH密钥是特定于SSH协议的,尽pipe您可能发现在Web应用程序中重build该function是一个有趣的挑战,但您应该知道,Web应用程序中常用的SSH公钥身份validation相当于部署SSL客户端证书。

如果您确实需要SSH提供的encryption,则可以执行以下操作:

让Apache只监听运行SSHd的服务器上的本地主机。 没有别的,如果你想保持安全。 然后,您只需创build一个到服务器的SSH隧道,该隧道将自己redirect到Apache正在侦听的端口。

这可以这样做: ssh -L 8080:127.0.0.1:80 [email protected] (这是为OS X)

build立连接后,您可以在远程(客户端)机器的浏览器中访问本地主机:8080并访问网页。