我做了这个
shell_exec('eval "$(ssh-agent -s)" 2>&1');
shell_exec('ssh-add /opt/.ssh/id_rsa 2>&1');
连接身份验证代理时仍然出错。第一行成功输出代理 ID。
有什么想法可以解释为什么以及如何解决这个问题?
答案1
这shell_exec()
函数在 shell 中运行命令,命令结束后,shell 也会结束(因此所有环境变量也会丢失)。
第二次调用时,调用新的 shell,但是没有指向运行的环境变量ssh-agent
,因此失败也就不足为奇了。
解决这个问题有多种可能性:
最简单的方法是在单个 shell 中运行这两个命令:
shell_exec('eval "$(ssh-agent -s)" 2>&1 && ssh-add /opt/.ssh/id_rsa 2>&1');
另一种方法是直接在 PHP 中解析环境变量,将它们设置为脚本的环境,以便它们传递到下一个 shell(希望如此)。
最后一个与前一个类似,但是将环境作为下一个的一部分传递
shell_exec()
,因为在第一行中,你不需要它eval
,但在第二行中它是必不可少的:$str = shell_exec('$(ssh-agent -s)'); shell_exec('eval "' . $str . '"; ssh-add /opt/.ssh/id_rsa 2>&1');