「sshホストbash」には「-t」が必要ですが、「sshホスト」がbashをうまく実行するのはなぜですか?

「sshホストbash」には「-t」が必要ですが、「sshホスト」がbashをうまく実行するのはなぜですか?

これを行うと、ssh hostログインしhostて bash が実行されます。しかし、ssh host bash私がそうすれば、それは何もしないかのようにそこに座っています。利用可能なbashプロンプトを取得するには、次のものを入力する-t必要がありますssh -t host bash

実際にはただそこに座って何もしません。これを行うとssh host bash(nothing -t)、動作しているbashが表示されるように見えますが、プロンプトは表示されません。echo fooあるいは、同じコマンドを実行して使用ps -ef可能な出力を取得することもできます。プロンプトはありません。

bashプロンプトが機能するはずですが、-tbashが正しく機能するのはなぜですか?ssh host bashssh host

ベストアンサー1

実行時:

ssh host some    command

sshリモート側でpseudo-ttyデバイスの使用を要求しないでください。 stdout および stderr またはリモートコマンドはパイプです。sshd走る:

exec("remote-user-login-shell", ["remote-user-login-shell", "-c", "some command"])

これがrshパターンです。コマンドを指定しない場合は、このrloginモードに入り、そのモードで擬似端末を起動し、次を実行するログイン対話型シェルセッションを実行します。

exec("remote-user-login-shell", ["-remote-user-login-shell"])

-前半を追加すると、argv[0]ログインシェルとして機能することをシェルに通知します。)

-t特定のコマンド(bashまたは)を対話的に実行する必要がある場合は、リモートホストに擬似端末を作成してリモートコマンドと対話する必要がありますvisshdそうでない場合は、いいえ使いたい-t

存在する:

ssh host bash

bash何もせず、ただ相互作用にならないだけです。スクリプトを処理するのと同じ方法で入力を処理したり、実行するのと同じように、コマンドを入力して出力を表示したりcat | bashできます。

歴史的にrsh(交換)は、ssh実行コマンドが与えられなかったときに実際に実行中であり、そのサービスから別のサービス(別のTCPポートにあります)が呼び出されました。rloginrloginrsh

おすすめ記事