sshクライアントの引数の後にインタラクティブプログラムが続くときにsshdが疑似端末を使用しないのはなぜですか?

sshクライアントの引数の後にインタラクティブプログラムが続くときにsshdが疑似端末を使用しないのはなぜですか?

SSHサーバーに接続する一般的な方法はですssh username@ip_address。ただし、ユーザーはリモートコンピュータでのみプログラムを実行したい場合があります。したがって、プログラム名は一般的なパラメータに従います(ssh username@ip_address <program_name>例:)ssh username@ip_address ls。この主張は、(ユーザー入力を受け入れて出力も提供する)対話型プログラムを除外することをお勧めしますtop。出力は次のとおりです

TERM 環境変数が設定されていません。

これは、sshdと最上位プログラムの間に接続された(類似)端末がないことを意味します。解決策は、-tコマンド全体になるパラメータを追加することですssh -t username@ip_address top

私の質問は、基本的にsshdが非対話型プログラムと通信するために疑似端末を使用せず、対話型プログラム-tにパラメータを追加する必要がない理由です。

ベストアンサー1

はい、他の人が言ったように、PTYには少しオーバーヘッドがあります。ただし、リモートコマンドを実行するときにPTYを使用しない最大の理由は、情報が失われるためです。

通常、sshを介してリモートでコマンドを実行すると、コマンドstdoutstderrストリームがlocalhostに送信されますstdoutstderrつまり、個別にリダイレクト/パイプできます。たとえば、次のようになります。

$ ssh server ls foo bar
ls: cannot access bar: No such file or directory
foo
$ ssh server ls foo bar > stdout 2> stderr
$ cat stdout
foo
$ cat stderr
ls: cannot access bar: No such file or directory

stdoutただし、PTYを使用している場合、PTYには別々の出力/エラーストリームがないため、すべての出力がPTYに移動します。

$ ssh -t server ls foo bar > stdout 2> stderr
$ cat stdout
ls: cannot access bar: No such file or directory
foo
$ cat stderr
$

おすすめ記事