web-dev-qa-db-ja.com

「エコーコマンド| sshサーバー」と「sshサーバーコマンド」の間で混乱

非対話型ログインシェルについて学習している間に、SSH経由でコマンドをリモートで実行する2つの方法に遭遇しました。私にとっては、どちらも同じように見えます。しかし、残念ながらそうではありません。

コマンドecho "shopt login_Shell; echo \$-" | ssh -l poweruser 192.168.1.67、次の出力が表示されます。

Pseudo-terminal will not be allocated because stdin is not a terminal.
[email protected]'s password:
login_Shell     on 
hBs

しかし、コマンドssh -l poweruser 192.168.1.67 "shopt login_Shell; echo \$-"、別の出力が表示されます。

[email protected]'s password:
login_Shell     off
hBc

2つ目のケースでは、パスワードの入力を求められたにもかかわらず、シェルがログインシェルではない理由を教えてください。

6
Karthik

man ssh文書

commandを指定すると、ログインシェルではなくリモートホストで実行されます。

その理由は、コマンドを指定した場合と指定しなかった場合の2つであり、sshは意図的に(設計上)これらの場合の動作が異なります。

コマンドを指定しなかったものでは、ログインシェルが起動され、パイプされた入力を読み取って実行しました。コマンドを提供したものでは、それが代わりに起動されました。

パスワードの入力は関係ありません。これは、シェルまたはコマンドが起動される前に、サーバーに対してユーザーを認証しています。

10
Michael Homer