Symfony执行含SSL会话Shell命令时www-data用户主机密钥验证失败求助
解决Symfony中www-data用户SSH主机密钥验证失败问题
核心原因
Web端执行Symfony脚本时,进程以www-data用户运行,该用户的SSH配置(密钥、主机指纹记录)与个人用户不一致,导致无法通过目标主机的密钥验证。
具体解决方案
1. 以www-data身份完成SSH配置(推荐)
无需切换到www-data用户,用sudo -u直接模拟该用户执行命令:
- 生成www-data专属的SSH密钥对(若需要密钥认证):
参数说明:sudo -u www-data ssh-keygen -t ed25519 -N "" -f /var/www/.ssh/id_ed25519-N ""设置空密码,-f指定密钥存储路径(www-data的默认家目录为/var/www)。 - 将公钥部署到目标主机:
sudo -u www-data ssh-copy-id user@target-host - 手动验证并记录主机指纹:
执行后输入sudo -u www-data ssh user@target-hostyes确认信任主机,www-data的/var/www/.ssh/known_hosts会自动添加该主机的指纹信息。
2. 手动配置SSH文件权限与内容
如果上述命令执行受限,可手动操作:
- 创建并设置www-data的.ssh目录权限:
sudo mkdir -p /var/www/.ssh sudo chown www-data:www-data /var/www/.ssh sudo chmod 700 /var/www/.ssh - 复制个人用户的主机指纹记录到www-data的known_hosts:
sudo cp ~/.ssh/known_hosts /var/www/.ssh/ sudo chown www-data:www-data /var/www/.ssh/known_hosts sudo chmod 600 /var/www/.ssh/known_hosts - 复制密钥文件(若使用个人密钥):
sudo cp ~/.ssh/id_ed25519 /var/www/.ssh/ sudo cp ~/.ssh/id_ed25519.pub /var/www/.ssh/ sudo chown www-data:www-data /var/www/.ssh/id_ed25519* sudo chmod 600 /var/www/.ssh/id_ed25519 sudo chmod 644 /var/www/.ssh/id_ed25519.pub
3. 在Symfony命令中指定SSH参数(临时方案)
若不想修改www-data全局配置,可在执行Shell命令时直接传入SSH选项:
- 跳过主机密钥验证(仅测试环境使用,存在安全风险):
use Symfony\Component\Process\Process; $process = new Process([ 'ssh', '-o', 'StrictHostKeyChecking=no', 'user@target-host', 'your-shell-command' ]); $process->run(); - 指定自定义的密钥和known_hosts文件:
$process = new Process([ 'ssh', '-o', 'UserKnownHostsFile=/var/www/.ssh/known_hosts', '-i', '/var/www/.ssh/id_ed25519', 'user@target-host', 'your-shell-command' ]); $process->run();
内容的提问来源于stack exchange,提问作者TheTom
相关产品推荐
相关产品推荐

