2

下面的答案并不让我满意,我想知道更多关于发生了什么。 谁能解释 ssh2_exec() 函数调用中的 $pty 参数

它是强制客户端告诉服务器生成 PTY 还是 PTY 完全是客户端的?据我所知,它附加到诸如 SSHd 之类的进程,这需要调用服务器。此外,当设置为true时,它​​是否模拟默认 shell?它是什么?我知道你可以通过xterm例如,它模拟 PTY,这有什么不同吗?从我的角度来看,仿真意味着它不是真正的 PTY。

读起来可能有点混乱,但我正在努力掌握这个概念。谢谢你。我很感激。

4

1 回答 1

2

“pty”本质上是某种应用程序或守护进程之间的“管道”(例如,我从事虚拟化工作,我们使用 pty 为虚拟机提供虚拟终端)。pty 有“主人”和“奴隶”的一面。从端是您的正常“终端”程序将使用的 - xterm 或 ssh 等。主端由任何“事物”提供数据到终端 [如果您写入 pty,例如当您键入或粘贴时text into an x​​term] 它被控制主机的进程读取 - 然后主机对这些数据执行它应该做的任何事情 - 例如在 ssh 情况下通过网络发送它。

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

pty 是一个“本地”终端,但 sshd 进程将从另一端向它提供数据,而您的本地 sshd 进程将其馈送到 pty 的“主”端。

这个页面描述了我想说的 http://lugatgt.org/2009/10/28/ssh-tips-and-tricks-2/

于 2013-01-05T18:48:26.923 回答