理解ssh2_exec()中的PTY参数

时间:2013-01-05 18:06:26

标签: php linux ssh pty

以下答案并不能让我满意,我希望了解更多关于正在发生的事情。 Can anyone explain the $pty argument in ssh2_exec() function call

它是否强制客户端告诉服务器产生一个PTY或者这个客户端是完全客户端的? 据我所知,它附加到一个进程,例如SSHd,这需要调用服务器。 此外,设置为 true 时是否会模拟默认shell?它是什么? 我知道你可以通过 xterm 来模拟一个PTY,这有什么不同吗?从我的角度来看,仿真暗示它不是真正的PTY。

阅读可能有点令人困惑,但我正试图抓住这个概念。 谢谢。我很感激。

1 个答案:

答案 0 :(得分:2)

“pty”本质上是某种应用程序或守护程序之间的“管道”(例如,我致力于虚拟化,我们使用pty为虚拟机提供虚拟终端)。一个pty有一个“主”和一个“奴隶”。从属端是你的正常“终端”程序将使用的 - xterm或ssh等。主机被任何“东西”用于将数据提供到终端中[并且如果你写入pty,例如,当你将文本输入或粘贴到xterm中时,它会被控制主机的进程读取 - 然后主机会对这些数据执行任何操作 - 例如在ssh案例中通过网络发送它。

这完全与“你的结局”发生的事情有关。 如果你正在运行一个通过ssh“交互”的命令 - 说“ssh somemachine make menuconfig”[假设你的主目录是一个linux源目录 - 我们将忽略它可能不是]的事实,默认是没有做一个pty,所以menuconfig可能会失败[至少正常运行],因为它是一个“交互式”文本程序,允许你按键移动等等。所以使用“ssh -t somemachine make menuconfig”将给出你的ssh a pty。或者,“ssh somemachine”默认会给你一个pty,因为你需要在另一端输入东西。

pty是一个“本地”终端,但是sshd进程将为其提供来自另一端的数据,并且您的本地sshd进程将其提供给pty的“主”端。

此页面描述了我试图说的内容 http://lugatgt.org/2009/10/28/ssh-tips-and-tricks-2/