PHP shell_exec ssh-add ssh-gent 无法打开与身份验证代理的连接

PHP shell_exec ssh-add ssh-gent 无法打开与身份验证代理的连接

我做了这个

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');
    

相关内容