2013-01-05 31 views
2

下面的答案不能滿足我,我想更多地瞭解發生了什麼。 Can anyone explain the $pty argument in ssh2_exec() function call瞭解ssh2_exec()中的PTY參數

它是否強制客戶端告訴服務器產生一個PTY或是完全客戶端的PTY? 據我所知,它連接到一個進程,例如SSHd,這需要調用服務器。 另外,當設置爲true它是否模擬默認shell?它是什麼? 我知道你可以通過xterm例如,模擬PTY,這是否有什麼不同?仿真意味着從我的角度來看它不是真正的PTY。

這可能有點令人困惑,但我試圖理解這個概念。 謝謝。我很感激。

回答

2

「pty」本質上是某種應用程序或守護進程之間的「管道」(例如,我在虛擬化方面工作,我們使用pty爲虛擬機提供虛擬終端)。一個pty有一個「主」和一個「奴隸」的一面。從屬端是你正常的「終端」程序將使用的東西 - xterm或ssh等等。主機被任何「東西」提供給終端的數據所使用[並且如果你寫入了pty,例如當你鍵入或粘貼文本到一個xterm]時,它會被控制主控的進程讀取 - 主控然後做任何它應該處理的數據 - 例如,通過網絡以ssh方式發送。

這完全與「你的結局」有關。 如果你正在運行一個通過ssh「交互」的命令 - 比如說「ssh somemachine make menuconfig」[假設你的主目錄是一個linux源代碼目錄 - 我們將忽略它可能不存在的事實],默認值是因爲它是一個「交互式」的文本程序,可以讓你按鍵移動,等等,所以使用「ssh -t somemachine make menuconfig」將不會產生pty,所以menuconfig可能會失敗[至少正常運行]給你的ssh一個pty。或者,「ssh somemachine」默認會給你一個pty,因爲你需要在另一端輸入東西。

pty是一個「本地」終端,但sshd進程將從另一端向它提供數據,並且您本地的sshd進程將其饋送到pty的「主」端。

本頁面描述我所想說 http://lugatgt.org/2009/10/28/ssh-tips-and-tricks-2/

+0

一個偉大的答案,謝謝。很詳細。 – user1807879