我正在尝试通过 Mac OS X 10.6 上的命令行使用 PHP 建立与远程服务器的交互式 SSH 连接。我目前正在使用 PHP 的 proc_open 函数来执行以下命令:
ssh -t -t -p 22 [email protected] /cdn-cgi/l/email-protection
这几乎有效。这-t -t
选项应该强制使用伪终端,而它们几乎就是这样做的。我可以输入 SSH 密码并按 Enter 键。然而,按下 Enter 键后,终端似乎只是挂起。没有输出,什么也没有——就像 SSH 会话失败一样。我无法运行命令或任何东西,必须使用 Ctrl+C 杀死整个东西。我知道登录成功,因为我可以执行类似的命令ssh -t -t -p 22 [email protected] /cdn-cgi/l/email-protection "ls -la"
并得到正确的输出。
我认为问题一定与我在 proc_open 调用中使用标准管道有关,所以我用 pty 替换了它们。我收到以下错误:“此系统不支持 pty 伪终端...”
Mac OS X 是否根本不支持 pty 或伪终端? (我对使用所有这些 shell 术语还很陌生)。
这是 PHP 代码:
$descriptorspec = array(0 => array("pty"), 1 => array("pty"), 2 => array("pty"));
$cwd = getcwd();
$process = proc_open('ssh -t -t -p 22 [email protected] /cdn-cgi/l/email-protection', $descriptorspec, $pipes, $cwd);
if (is_resource($process))
{
while (true)
{
echo(stream_get_contents($pipes[1]));
$status = proc_get_status($process);
if (! $status["running"])
break;
}
}
(抱歉 - 我一生都无法弄清楚 SO 的格式说明......)
我究竟做错了什么?为什么我不能使用 pty?这在 Mac OS X 上是不可能的吗?感谢您的帮助!