2

次の答えは私を満足させません。何が起こっているのかもう少し知りたいです。 誰でも ssh2_exec() 関数呼び出しで $pty 引数を説明できますか

クライアントがサーバーに PTY を生成するように強制するか、それとも PTY は完全にクライアント側にあるのか? 私の知る限り、たとえばSSHdなどのプロセスに接続されているため、サーバーへの呼び出しが必要です。また、trueに設定すると、デフォルトのシェルがエミュレートされますか? それは何ですか?たとえば、PTYをエミュレートするxtermを渡すことができることは知っていますが、これは何か違いがありますか? エミュレーションは、私の観点からは、それが実際の PTY ではないことを意味します。

少し読みにくいかもしれませんが、私はこの概念を理解しようとしています。ありがとうございました。それは有り難いです。

4

1 に答える 1

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/

于 2013-01-05T18:48:26.923 に答える