每个子域的SSH主目录


12

我想知道是否可以为每个子域的同一ssh用户设置不同的主目录。

因此,假设您使用ssh myuser@example.com主目录登录将是: /www/httpdocs/

如果使用ssh myuser@subdomain1.example.com主目录登录,将是: /www/subdomain1/

如果使用ssh myuser@subdomain2.example.com主目录登录,将是: /www/subdomain2/

...

等等。

Answers:


19

SSH无法执行此操作,因为SSH协议未在呼叫中包含请求的主机名。(HTTP是确实包含所请求的主机名的少数协议之一,这就是它可以用于虚拟主机的方式。)您可以尝试其他几种方法:

  • 您可以为每个子域创建单独的用户,但具有与“主要”用户相同的UID。子域用户会将其主目录设置为该子目录。例:

    useradd -o -u 4711 -d /var/www/subdomain1 subdomain1

  • 使用PAM模块基于子域进行身份验证。如果存在这样的模块,我不知道它将是什么,但是可能值得研究。

  • 为每个子域使用单独的SSH密钥。在客户端上,设置a,.ssh/config以便您键入ssh subdomain以使其使用正确的密钥登录。在服务器端,每个公共密钥都以authorized_keys开头environment="DOMAIN=subdomain"。在服务器端,还要.ssh/rc根据DOMAIN环境变量制作一个将cd到正确目录的文件。这需要使用配置服务器PermitUserEnvironment yes


谢谢!听起来是个不错的解决方案。我会尝试的。
kapale 2014年

我实际上还想提出使用SSH密钥的解决方案,特别是从连接源计算机中导出ENV var,但是他询问是否有HOME目录,而不仅仅是cd进入目录,因此我认为这不是一个好的解决方案。
FlorinAsăvoaie2014年

+ 1,SSH密钥的想法非常聪明,我不知道您可以像这样为每个密钥设置环境。
tgies

8

这是不可能的,因为SSH协议不会在数据包中的任何位置发送请求的主机名。

我实现此目标的想法是使用类似OpenVZ的方法来隔离子域,并为每个子域都有一个单独的IP。


可能,但对于我需要此方法的情况,则需要太多努力。谢谢
kapale 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.