デフォルトでは、サーバーで対話型プログラムを実行している場合は、代わりにssh -t
使用する必要がありますssh
。たとえば、次のようになります。
これは働きます:
ssh -t user@server top
。これはうまくいきません:
ssh user@server top
。
問題は、sshがそのようなプログラムを実行するためにサーバー側のttyを要求するのはなぜですか?サーバープログラムとクライアントttyの間で直接データをストリーミングすることは可能ですか?
いくつかの詳細を追加するには、ttyがstdoutとstderrを単一のストリームに多重化できることを知っています。つまりssh -t
、クライアント側を実行する場合、stdoutとstderrの違いを区別することはできず、別々にパイプすることもできません。それで、その間にあるサーバー側のttyが透明性を破壊すると思います。 sshがローカルプログラムと同じサーバー側プログラムの実行経験を提供することをお勧めします。