web-dev-qa-db-ja.com

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

インタラクティブ、非インタラクティブ、ログイン、および非ログインシェルについて読み続けています。

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

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

MacからubuntuマシンにSSHで接続すると、どのタイプのシェルが起動しますか?

5
Tyler DeWitt

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
    
3
Scott Severance

インタラクティブなログインシェルを取得します。しかし、それを当然のことと思ってはいけません。自分でチェックしてください。

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

# shopt | grep login
login_Shell     on

これは、インタラクティブなシェルがあることを示しています。iman bashから)を探してください。

# echo $-
himBH

取得したインタラクティブログインシェルは、/etc/profileで説明されているように、~/.bash_profileを読み取り、~/.bash_login~/.profile、およびman bashのいずれかよりも読み取ります。

Bashがインタラクティブログインシェルとして、または--loginオプションを指定した非インタラクティブシェルとして呼び出されると、最初にファイル/ etc/profileからコマンドを読み取り、実行します。そのファイルが存在します。そのファイルを読み取った後、〜/ .bash_profile、〜/ .bash_login、〜/ .profileの順に検索し、最初に存在して読み取り可能なコマンドからコマンドを読み取って実行します。シェルの起動時に--noprofileオプションを使用して、この動作を禁止できます。

2
jaume

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

 [max @ localhost〜] $ echo $ Shell 
/bin/bash 

シェルタイプがこの変数Shellに格納されているため、この出力が得られます。

環境変数を知るには、このコマンドを入力します

 [max @ localhost〜] $ env 
。
。
。
 HOSTNAME = localhost.localdomain 
 Shell =/bin /bash
HISTSIZE=1000
USER=max
.
.
.

echo $Shellと入力すると、ここに保存されている値が出力されます。

この値は、起動するたびに更新されます

0
max

ssh(1) のマニュアルページには、

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

そして

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

それらはあなたが得ているシェルがログインシェルであることを私に示唆します。

0
garyjohn