更新

更新

在我的应用程序中,我有两个服务器(私有服务器和外部服务器),并且需要私有服务器以非常高的频率在外部服务器上运行脚本。

为了允许这种高频率的吞吐量,我正在使用ControlMaster打开持久的 ssh 连接(如果没有它,外部服务器会因为处理身份验证而导致 CPU 负载过高而崩溃)。

这是 ssh 配置:

Host <external_host_ip>
  ControlMaster auto
  ControlPath ~/.ssh/cm_socket/%r@%h:%p
  ControlPersist 600
  User user1
  IdentityFile ~/key.pem

此配置适用于“user1”用户。不幸的是,对于“www-data”用户,它对我不起作用。

假设 www-data 的根文件夹是 /var/www,我在那里添加了文件夹 cm_socket,当我测试连接时,我发现那里发生了一些事情:

$ ll /var/www/.ssh/cm_socket/
srw------- 1 www-data www-data    0 Oct 19 08:49 user1@host_ip:22=

但是,它导致 apache 崩溃,唯一有帮助的就是重新启动 apache。

更新

/var/www 应该是 www-data 的根目录:

 $ cat /etc/passwd | grep www
 www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

这是 /var/www/.ssh/config:

Host <external_host_ip>
    ControlMaster auto
    ControlPath ~/.ssh/cm_socket/%r@%h:%p
    ControlPersist yes
    User user1
    IdentityFile /home/user1/key_wwwdata.pem

/var/www/.ssh的内容和权限:

$ ll /var/www/.ssh/
drwxr-xr-x 2 www-data www-data 4096 Oct 19 08:49 cm_socket/
-rw-r--r-- 1 www-data www-data  198 Oct 19 08:44 config

密钥文件的权限:

$ ll /home/user1/key_wwwdata.pem
-rw------- 1 www-data www-data 1675 Oct 18 09:11 /home/user1/key_wwwdata.pem

有没有办法让该解决方案适用于所有用户(包括 www-data)?

答案1

www-data用户的 shell 通常设置为/usr/sbin/nologin阻止 ssh 登录。

你可以尝试改变www-data运行以下命令来获取 shell:

sudo chsh www-data

并输入/bin/bash新的 shell 值。

相关内容