これを行うと、ssh host
ログインしhost
て bash が実行されます。しかし、ssh host bash
私がそうすれば、それは何もしないかのようにそこに座っています。利用可能なbashプロンプトを取得するには、次のものを入力する-t
必要がありますssh -t host bash
。
実際にはただそこに座って何もしません。これを行うとssh host bash
(nothing -t
)、動作しているbashが表示されるように見えますが、プロンプトは表示されません。echo foo
あるいは、同じコマンドを実行して使用ps -ef
可能な出力を取得することもできます。プロンプトはありません。
bashプロンプトが機能するはずですが、-t
bashが正しく機能するのはなぜですか?ssh host bash
ssh 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
または)を対話的に実行する必要がある場合は、リモートホストに擬似端末を作成してリモートコマンドと対話する必要がありますvi
。sshd
そうでない場合は、いいえ使いたい-t
。
存在する:
ssh host bash
bash
何もせず、ただ相互作用にならないだけです。スクリプトを処理するのと同じ方法で入力を処理したり、実行するのと同じように、コマンドを入力して出力を表示したりcat | bash
できます。
歴史的にrsh
(交換)は、ssh
実行コマンドが与えられなかったときに実際に実行中であり、そのサービスから別のサービス(別のTCPポートにあります)が呼び出されました。rlogin
rlogin
rsh