UbuntuマシンにSSH接続するとき、どのようなシェルを使用しているのでしょうか

UbuntuマシンにSSH接続するとき、どのようなシェルを使用しているのでしょうか

私は対話型シェル、非対話型シェル、ログイン シェル、非ログイン シェルについて読み続けています。

(これは、どの .bash* ファイルが読み取られるかというコンテキストです)。

それぞれのシェルの種類が何なのか分からないので、まずは基本から始めましょう。

Mac から Ubuntu マシンに SSH 接続すると、どのようなタイプのシェルが起動されますか?

答え1

Ubuntu ボックスに SSH で接続すると、対話型ログイン シェルが利用できるようになります。違いは次のとおりです。

  • インタラクティブ vs. 非インタラクティブ:プロンプトで入力できるシェルはすべて対話型です。実際、多くのスクリプトは$PS1プロンプト文字列を保持する変数をテストして、対話型かどうかを判断します。シェルがシェル スクリプトを実行している場合、それは非対話型です。

    したがって、 を実行するとssh yourbox.example.com、デフォルト設定を前提として対話型シェルが取得されますが、 を実行するとssh yourbox.example.com mighty_shellscript.sh、非対話型シェルになり、スクリプトが終了すると SSH セッションが終了します。

  • ログインと非ログイン:コンソールまたはリモート (SSH など) からログインする場合、または-lにオプションを渡す場合はbash、ログイン シェルが取得されます。それ以外の場合 (ターミナル ウィンドウを開いた場合など) は、非ログイン シェルが取得されます。

    シェルがログイン シェルであるかどうかをテストするには、そのコマンド名が-bashではなく であるかどうかを確認しますbash

    ps -ef | grep [b]ash
    

答え2

対話型のログイン シェルが提供されます。ただし、当然のことと思わず、自分で確認してください。

これは、ログイン シェルがあることを示しています ( からman bash):

# shopt | grep login
login_shell     on

これは対話型シェルがあることを示しています。i(from man bash) を探します:

# echo $-
himBH

取得した対話型ログイン シェルは、 、/etc/profileおよび のいずれかを読み取り、で説明されているように、~/.bash_profile~/.bash_login~/.profileman bash

bashが 対話型ログインシェル、または--loginオプション付きの非対話型シェルとして、/etc/profile ファイルが存在する場合は、まずそのファイルからコマンドを読み取って実行します。そのファイルを読み取った後、~/.bash_profile、~/.bash_login、~/.profile をこの順序で探し、最初に存在し読み取り可能なファイルからコマンドを読み取って実行します。 この動作を抑制するには、シェルの起動時に --noprofile オプションを使用できます。

答え3

ssh(1)manページにはこう書いてある。

もし指示が指定されている場合は、ログインシェルの代わりにリモートホスト上で実行されます。

そして

ユーザーの ID がサーバーによって受け入れられると、サーバーは指定されたコマンドを実行するか、マシンにログインしてユーザーにリモート マシン上の通常のシェルを提供します。

これらは、取得するシェルがログイン シェルであることを示唆しています。

答え4

このコマンドを試してください。

[max@localhost ~]$ エコー $SHELL
バイナリ

この変数にシェルタイプが格納されているため、この出力が表示されますSHELL

環境変数を確認するには、このコマンドを入力してください

[max@localhost ~]$ 環境
ホスト名=localhost.localdomain
シェル=/bin/bash
ヒストサイズ=1000
ユーザー=最大

入力中にecho $SHELLここに保存されている値が表示されます

この値は起動ごとに更新されます

関連情報