每个子域的 SSH 主目录

每个子域的 SSH 主目录

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

假设您使用主目录登录: ssh [email protected]/www/httpdocs/

如果你使用主目录登录,则会出现: ssh [email protected]/www/subdomain1/

如果你使用主目录登录,则会出现: ssh [email protected]/www/subdomain2/

...

等等。

答案1

SSH 无法做到这一点,因为 SSH 协议在调用中不包含请求的主机名。(HTTP 是少数包含请求的主机名的协议之一,这就是它可用于虚拟托管的方式。)您可以尝试其他几种方法:

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

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

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

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

答案2

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

我实现这一目标的想法是使用类似 OpenVZ 的东西来隔离子域,并为每个子域提供单独的 IP。

相关内容