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上是不可能的吗?谢谢你的帮助!