我正在尝试通过 Mac OS X 10.6 上的命令行使用 PHP 建立与远程服务器的交互式 SSH 连接。我目前正在使用 PHP 的 proc_open 函数来执行以下命令:
ssh -t -t -p 22 user@server.com
这几乎可以工作。这些-t -t
选项应该强制一个他们几乎做的伪终端。我可以输入 SSH 密码并按回车键。但是,按下回车后,终端似乎只是挂起。没有输出,什么都没有——就好像 SSH 会话失败了。我无法运行命令或任何东西,必须使用 Ctrl+C 杀死整个事情。我知道登录成功,因为我可以执行类似的命令ssh -t -t -p 22 user@server.com "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 user@server.com', $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 上是不可能的吗?谢谢你的帮助!