朝から昼寝

ITや家計、身近なことの整理

[お知らせ]
当サイトは、2024年1月1日に
新URL(happynap.net)に引っ越しました





このページの内容は、最新ではない場合がありますので、新URLをご確認ください。






当サイトには広告を含みます。"オススメ"として紹介している商品やサービスは、個人的にそう思えたものだけです。
共感、興味をもっていただけるものがあればご利用ください (広告掲載ポリシー)。

ssh,sftp,scp時のログインシェル、インタラクティブシェル

概要

スクリプトやツールを使用する際、ログインシェルか、インタラクティブシェルかを考慮しないといけないことがあります。
本記事では、sshsftpscpでサーバにログインした際に起動されるシェルがログインシェルかどうか、インタラクティブシェルかどうかについてまとめます。

本記事の目的

  • sshsftpscpを実行した際に起動されるシェルがログインシェルかどうか、インタラクティブシェルかどうかを確認する


目次

基本

前提

対象はbash(GNU Bash)、ssh、sftp、scpあたりのコマンドと、WinSCPです。

記載されている動作確認結果はRHEL8系のものです。別のOSやLinuxディストリビューションについては、コマンド自体の違いは無いか、あっても少ないはずですが、関連するStartup Files(profileやbashrc等)の構成が違うことより結果的に異なる動作になる場合があります。

sshsftpscp時のログインシェル、インタラクティブシェル

以下のようになります。

一般的なssh関連アクセスと、WinSCPによるアクセスに分けて記載します。

一般的なssh関連アクセス

コマンド ログインシェル インタラクティブシェル
ssh
sftp
scp

●:該当

"一般的なssh,sftp,scp"と記載したのは、OpenSSHのクライアント機能や、sshについてはWindows上のターミナルソフト(PuTTYTeraterm)を想定したものです。 一方で、WinSCPのsftp、scpによるアクセスは少し異なるため、後述します。

WinSCPによるsftp、scpアクセス

コマンド ログインシェル インタラクティブシェル
sftp
scp(※1)

●:該当

(※1)WinSCPのシェル設定が"デフォルト"の場合です。

WinSCPの場合は、内部的にはscp時にログインシェルが起動します。

詳細

sftp,scp時のログインシェル、インタラクティブシェルの確認方法

sftpscp経由のアクセス時に、ログインシェル、インタラクティブシェルかどうかを確認する方法をメモしておきます。
※これらのアクセス時には、対話的なシェル環境が無いので以下のような方法を使います。

/etc/profile/etc/bashrc、それぞれの冒頭に以下を追記します。

shopt > ~/shopt.txt
echo $- > ~/if_intr.txt

上記設定により、次回以降のログイン時にそれぞれのファイルが読み込まれると、そのユーザのホームディレクトリ配下にshoptecho $-の結果が記録されますので、そこからログインシェル、インタラクティブシェルかどうかを確認できます。
読み込まれなかった場合は、ファイルが作成されません。

shoptについては、ログインシェルかどうかの確認だけであればshopt -q login_shellだけでも良いです。 shopt以外に、echo $0 > ~/d0.txtのように$0の内容を記録することもできます。

shoptecho $-の結果の見方については、別記事でログインシェル、インタラクティブシェルの見分け方(bash)にまとめてあります。

sftp時の確認例

sftpでのアクセス時は、以下のようになります。
(WinSCPかどうかに関わらず同じ結果)

  • shoptの結果
    "login_shell off" ※非ログインシェル

  • echo $-の結果
    "hBc" ※"i"が無いので非インタラクティブ

  • (参考)echo $0の結果
    "bash" ※bashは起動されている

scp時の確認例

scpでのアクセス時は、以下のようになります(環境と設定により違います)。

scpWinSCPの場合(シェル設定が"デフォルト"時)

前述の表のとおりです。

  • shoptの結果
    "login_shell on" ※ログインシェル

  • echo $-の結果
    "hB" ※"i"が無いので非インタラクティブ

  • (参考)echo $0の結果
    "-bash" ※argv[0]の先頭が"-"なのでログインシェル

scpWinSCPの場合(シェル設定が"/bin/bash"時)

これは前述の表にはないパターンです。非ログインシェルになります。

  • shoptの結果
    "login_shell off" ※非ログインシェル

  • echo $-の結果
    "hBc" ※"i"が無いので非インタラクティブ

  • (参考)echo $0の結果
    "bash" ※bashは起動されている

scpWinSCP以外の場合(Linuxscpコマンド等)

前述の表のとおりです。

  • shoptの結果
    "login_shell off" ※非ログインシェル

  • echo $-の結果
    "hBc" ※"i"が無いので非インタラクティブ

  • (参考)echo $0の結果
    "bash" ※bashは起動されている

WinSCP内のSCP/シェルの設定等々

ここからはほぼ余談です。

WinSCPの設定画面には以下のようにSCP/シェルに関する設定画面があります。

基本的に"デフォルト"で問題がありませんが、前述のように適用されるシェル環境に違いがあります。

`SCP/シェル`の設定
`SCP/シェル`の設定

WinSCP開発元の関連マニュアルです。

The options are mainly used when working with SCP protocol.

Use the Shell option to specify what shell WinSCP will use. The bash shell is recommended for working with WinSCP.
The SCP/Shell Page (Advanced Site Settings dialog)

より詳細は以下です。

As a GUI client, WinSCP requires that the server provide more functionality than just SCP (which can only transfer files).
SCP (Secure Copy Protocol)
SCP Requirements
Other Options

WinSCSPでのscp使用時には、以下のようにシェルのコマンドを実行することもできます。

Running a Shell command

scpよりsftpを使用するケースがほとんどかと思いますが。

関連記事(シェル、umask等)