在我的应用程序中,我有两个服务器(私有服务器和外部服务器),并且需要私有服务器以非常高的频率在外部服务器上运行脚本。
为了允许这种高频率的吞吐量,我正在使用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 值。