私がssh
理解したいオプションは-t
次のとおりです。
-t
疑似端末割り当てを強制します。これは、リモートコンピュータ上で任意の画面ベースのプログラムを実行するために使用することができ、これは、例えばメニューサービスを実装する場合に有用である。複数の -t オプションは、ssh にローカル tty がない場合でも tty 割り当てを強制します。
したがって、TTYはデバイスです。 TTYを参照する1つの方法は、記述子(TTYデバイスを開いて得た)を使用することです。 STDIN、STDOUT、STDERR は記述子です。ただし、必ずしもTTYデバイスを参照するわけではありません。-t
オプションを使用すると、TTYデバイスを参照するように強制されます。このオプションの機能を理解するために、これは正しい推論方法ですか?
一般的なSTDIN、STDOUT、およびSTDERRを使用して達成できないTTYの特別な点は何ですか?
-t
オプションのユースケースの例を歓迎します。
ssh
このTTYはどのようなメカニズムに割り当てられますか?ssh
サーバーまたはクライアントから新しいTTYを作成しますか?これを確認するには? (新しいノードが表示される必要があります/dev/
...)この新しいTTYは、既存のSTDIN、STDOUT、およびSTDERRにどのようにバインドされますか?
答え1
-t
オプションは、[標準ファイル記述子]がTTYデバイスを参照するように強制します。このオプションの機能を理解するために、これは正しい推論方法ですか?
いいえ。この-t
オプションは離れてマシンのstdin / out / errは、一対のパイプではなく擬似ttyスレーブに接続されています。
デフォルトでは、次の条件が満たされると、ptyで実行されます。(ㅏ)明示的な命令は下されず、(二)SSHの標準入力顧客それ自体はttyです。-t
場合でも(ㅏ)条件が満たされず、二つそのうち(-tt
)(二)満足していません。
sshはTTYを割り当てるためにどのようなメカニズムを使用しますか?
いくつかのシステム依存メカニズムを介して。今日、これは主に[1]master_fd = posix_openpt()
が続く標準です。slave_fd = open(ptsname(master_fd))
sshはサーバーまたはクライアントから新しいTTYを生成しますか?
ssh
いつも次に、新しい擬似ttyを作成します。仕える人つまり、リモートシステムにあります。サーバーにpseudo-ttyが割り当てられ、ローカル(クライアント)stdinがttyの場合、ローカルttyはrawモードに設定されます。
これを確認するには? (新しいノードが表示されます
/dev/
。
不要。ただし、2019年の一般的なLinuxシステムでは、/dev/pts
それぞれの新しいpseudo-ttyの下に新しいファイルが表示されます。
この新しいTTYは、既存のSTDIN、STDOUT、およびSTDERRとどのような関係がありますか?
他のファイル記述子と同様に、等を使用するdup2(slave_fd, 0)
と、参照されているすべてのファイルが閉じられます。 ptyが割り当てられると、リモートセッションの制御ttyにもなります。dup2(slave_fd, 1)
dup2(newfd, oldfd)
oldfd
-t
オプションのユースケースの例を歓迎します。
ssh -t /bin/bash
ログインシェルがあるシステムでcsh
。-t
省略すると、/bin/bash
プロンプト、ジョブ制御、行編集機能などなしで実行されます。
一般的なSTDIN、STDOUT、およびSTDERRを使用して達成できないTTYの特別な点は何ですか?
検索してください;-)
パイプは、ttyや他の種類のファイルよりも「通常の」標準入力ではありません。
[1]それ自体に多くの問題があります(名前空間をマウントしてマウントするために複数のdevptを使用)。これがTIOCGPTPEER
Linuxにioctlが追加された理由です。これは、ファイルシステムを経由せずにスレーブデバイスを参照するfdを返します。