我想知道是否可以为每个子域的同一个 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。