web-dev-qa-db-ja.com

sshコマンドと非インタラクティブ、非ログインシェル

以下の投稿に文章があります。
ログインシェルと非ログインシェルの違い?

焦点はここにあります:
非インタラクティブログインシェルを取得する別の方法は、端末ではない標準入力を介して渡されるコマンドを使用してリモートでログインすることです。
ssh example.com <my-script-which-is-stored-locally(とは対照的に ssh example.com my-script-which-is-on-the-remote-machine、非インタラクティブ、非ログインシェルを実行します)。

著者は、上記の説明から2つの結論に達しています。

  1. 非インタラクティブログインシェル

    ssh example.com <my-script-which-is-stored-locally           
    
  2. 非インタラクティブ、非ログインシェル

    ssh example.com my-script-which-is-on-the-remote-machine
    

2番目の結論が正しいとは思いません。
実行するタイミングssh example.com my-script-which-is-on-the-remote-machine、アカウント名とパスワードはローカルで入力するよう求められます。
非対話型のログインシェルです。

ログインシェル:ログインシェルは、指定されたユーザーとしてシステムにログインします。これに必要なのはユーザー名とパスワードです。
ウェブによると ログインシェルの説明

非インタラクティブな非ログインシェルの場合は、ここに例を示します。mysqldやApache2などのデーモンは、すべて非インタラクティブな非ログインシェルです。

あなたの番です:trueまたはfalse?

4

ログインは、専門用語の中核となる概念であるログインシェルです。
Linuxの作業を説明するために抽象化された4つの段階があります:Init、Getty、Login、Shell。
ここでのログインは、ユーザー名をパラメーターとして取得し、ユーザーにパスワードの入力を求めるプログラムです。
ローカル側:

vim   /tmp/Shell.sh   
shopt login_Shell 

サーバー側(私のvpsサーバー):

vim   /tmp/Shell.sh   
shopt login_Shell 

1.非対話型ログインシェル
一般的な形式:ssh example.com <my-script-which-is-stored-locally

ssh  root@vps_ip  < /tmp/Shell.sh
Pseudo-terminal will not be allocated because stdin is not a terminal.
login_Shell     on

より明確に

ssh -t -t root@vps_ip  < /tmp/Shell.sh
Last login: Wed Mar  8 03:16:00 2017 from vps_ip
root@localhost:~$ 
root@localhost:~$ shopt login_Shell 
login_Shell     on

ローカルサイドブレークのインタープリターssh -t -t root@vps_ip < /tmp/Shell.shを2つの部分に分割します。
1.ssh -t -t root @ vps_ip
loginプログラムは、ログインしたvpsでrootをユーザーとして受け入れます。
2./tmp/Shell.sh
ローカル側のスクリプトがパラメーターとしてリモート側のインタープリターに渡され、実行されました。

これは、プロセス中の非対話型ログインシェルです。

2.非インタラクティブ非ログインシェル
一般的な形式:ssh example.com my-script-which-is-stored-on-remote-machine

debian8@hwy:~$ssh   root@vps_ip  '/bin/bash /tmp/Shell.sh'
login_Shell     off
debian8@hwy:~$

これは、プロセス中は非対話型の非ログインシェルです。

いくつかのハックトリックは、ログインシェルとして表示させることができます。

debian8@hwy:~$ssh   root@vps_ip  '/bin/bash --login /tmp/Shell.sh'
login_Shell     on
debian8@hwy:~$

コマンド全体ssh root @ vps_ip '/ bin/bash --login /tmp/Shell.sh'が実行された後、vpsサーバーにログインしません。
login_Shell onは意味を表示しませんでしたが、ログインしましたが、vpsサーバーが接続を閉じました、ログアウトしました。
非インタラクティブログインシェルおよび非インタラクティブ非ログインシェル に関するジルの結論は正しいです。

3

Ssh example.com my-script-which-is-on-the-remote-machineを実行する場合でも、アカウント名とパスワードはローカルで入力するよう求められます。

それはまだ非対話型ログインシェルです!

ログインシェルの対話性は、「ログイン名とパスワードを入力する」ケースでは定義されません。ローカルssh(またはキーが使用されます)によってパスワードの入力を求められ、パスワードがリモートsshdサーバーに渡され、正しく検証された場合にのみ、ShellUseLogin yessshd_configを使用しない限り、これは非常に危険です)。

2
Jakuje