Linux smbclient コマンド:実践的な例と使い方

LinuxBeginner
オンラインで実践に進む

はじめに

この実験(Lab)では、Linux の smbclient コマンドとその実用的な応用について探求します。smbclient ユーティリティは、Linux システムが Windows ファイル共有 (SMB/CIFS 共有) と対話することを可能にする強力なツールです。SMB (Server Message Block) は、Windows がファイル共有に使用するネットワークプロトコルであり、smbclient を使用すると、Linux ユーザーはこれらの共有にアクセスできます。

まず、Ubuntu 22.04 システムに smbclient をインストールし、コマンドの基本的な構文を学びます。その後、Windows 共有への接続、ディレクトリのナビゲート、ファイルの転送方法を実演します。

この実験(Lab)の終わりには、以下のことができるようになります。

  • smbclient ユーティリティのインストールと設定
  • Linux から Windows 共有への接続
  • Windows 共有上のファイルのナビゲートとリスト表示
  • Linux システムと Windows システム間のファイルの転送

Linux Commands Cheat Sheet

Ubuntu 22.04 への smbclient のインストール

smbclient パッケージは、Linux システムが Windows 環境で一般的に使用される SMB/CIFS ファイル共有と対話することを可能にするコマンドラインツールです。このステップでは、このパッケージを Ubuntu システムにインストールします。

まず、最新バージョンを取得するために、パッケージインデックスを更新しましょう。

sudo apt update

次のような出力が表示されるはずです。

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done

次に、smbclient パッケージをインストールします。

sudo apt install -y smbclient

出力は次のようになります。

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libsmbclient
Suggested packages:
  samba-common
The following NEW packages will be installed:
  libsmbclient smbclient
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 479 kB of archives.
After this operation, 1,711 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsmbclient amd64 2:4.15.5+dfsg-1ubuntu2 [222 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 smbclient amd64 2:4.15.5+dfsg-1ubuntu2 [257 kB]
Fetched 479 kB in 0s (1,030 kB/s)
Selecting previously unselected package libsmbclient.
(Reading database ... 26536 files and directories currently installed.)
Preparing to unpack .../libsmbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Selecting previously unselected package smbclient.
Preparing to unpack .../smbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

smbclient が正しくインストールされたことを確認するには、以下を実行します。

smbclient --version

インストールされた smbclient のバージョンを示す出力が表示されるはずです。

Version 4.15.5-Ubuntu

これで smbclient がインストールされたので、SMB/CIFS 共有との対話に使用できるようになりました。

smbclient の基本を理解する

smbclient をインストールしたので、実際の SMB 共有に接続する前に、その基本的な使用法と構文を理解しましょう。

コマンド構文

smbclient コマンドの基本的な構文は次のとおりです。

smbclient //server/share -U username%password [options]

ここで、

  • //server/share は、SMB 共有への UNC (Universal Naming Convention) パスです。
  • -U username%password は、認証用のユーザー名とパスワードを指定します。
  • [options] は、提供できる追加のパラメーターです。

実践用のローカルディレクトリの作成

SMB 共有との間で転送したいファイルを保存できるディレクトリを作成しましょう。

mkdir -p ~/project/smb-files

後で使用できるサンプルファイルをこのディレクトリに作成しましょう。

echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt

smbclient ヘルプの探索

smbclient で利用可能なすべてのオプションを表示するには、help コマンドを使用します。

smbclient --help

これにより、利用可能なすべてのオプションを含む長いヘルプテキストが表示されます。表示される可能性のある内容の一部を以下に示します。

Usage: smbclient [OPTION...] service <password>
  -M, --message=HOST                           Send message
  -I, --ip-address=IP                          Use this IP to connect to
  -E, --stderr                                 Write messages to stderr instead of stdout
  -L, --list=HOST                              Get a list of shares available on a host
  -T, --tar=<c|x>IXFvgbNan                     Command line tar
  -D, --directory=DIR                          Start from directory
...

一般的な smbclient コマンド

smbclient で SMB 共有に接続すると、さまざまなコマンドを使用してファイルをナビゲートし、操作できます。一般的なコマンドを以下に示します。

  • ls または dir: ファイルとディレクトリを一覧表示
  • cd directory: 別のディレクトリに変更
  • get file [localfile]: 共有からファイルをダウンロード
  • put file [remotefile]: 共有にファイルをアップロード
  • mget files...: 複数のファイルをダウンロード
  • mput files...: 複数のファイルをアップロード
  • mkdir directory: ディレクトリを作成
  • rmdir directory: ディレクトリを削除
  • rm file: ファイルを削除
  • help または ?: ヘルプを表示
  • quit または exit: smbclient を終了

これで smbclient の基本を理解できたので、次のステップでは、実際の SMB 共有に接続する方法を見ていきます。

テスト SMB 環境のセットアップ

実際のシナリオでは、実際の Windows または Samba サーバーに接続します。ただし、この実験では、ローカル Samba サーバーを使用して SMB 環境をシミュレートします。このアプローチにより、外部サーバーへのアクセスを必要とせずに、smbclient コマンドを練習できます。

Samba サーバーのインストール

まず、Samba サーバーパッケージをインストールしましょう。

sudo apt install -y samba

インストールプロセスを示す出力が表示されるはずです。

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
Suggested packages:
  bind9 bind9utils ctdb ldb-tools ntp | chrony python-markdown-doc python-pygments-doc
The following NEW packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.1 MB of archives.
After this operation, 51.3 MB of additional disk space will be used.
...

Samba 共有の作成

次に、シンプルな Samba 共有設定を作成しましょう。まず、元の設定ファイルをバックアップします。

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

共有するディレクトリを作成します。

mkdir -p ~/project/samba-share

この共有ディレクトリにテストファイルを作成しましょう。

echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt

次に、簡略化された Samba 設定を作成しましょう。

sudo bash -c 'cat > /etc/samba/smb.conf << EOF
[global]
   workgroup = WORKGROUP
   server string = Samba Server
   log file = /var/log/samba/log.%m
   max log size = 50
   security = user
   map to guest = bad user

[testshare]
   path = /home/labex/project/samba-share
   browseable = yes
   read only = no
   guest ok = yes
   force user = labex
EOF'

現在のユーザーを Samba ユーザーに追加し、テスト用のパスワードを設定します。

sudo smbpasswd -a labex

プロンプトが表示されたら、password のような簡単なパスワードを入力します (2 回入力する必要があります)。

New SMB password:
Retype new SMB password:
Added user labex.

変更を適用するために、Samba サービスを再起動します。

sudo service smbd restart

これで、システム上に testshare というローカル Samba 共有が設定されました。smbclient を使用して、リモートの Windows 共有であるかのように接続できます。

smbclient を使用した SMB 共有への接続

テスト SMB 環境がセットアップされたので、smbclient を使用して共有に接続しましょう。

利用可能な共有のリスト表示

まず、ローカルマシンで利用可能なすべての共有をリスト表示します。

smbclient -L localhost -U labex

プロンプトが表示されたら、Samba ユーザーに設定したパスワード (例:password) を入力します。

Enter WORKGROUP\labex's password:

次のような出力が表示されるはずです。

        Sharename       Type      Comment
        ---------       ----      -------
        testshare       Disk
        IPC$            IPC       IPC Service (Samba Server)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------
        UBUNTU               Samba Server

        Workgroup            Master
        ---------            -------
        WORKGROUP            UBUNTU

これにより、新しく作成された testshare 共有が利用可能であることがわかります。

共有への接続

次に、testshare 共有に接続しましょう。

smbclient //localhost/testshare -U labex

プロンプトが表示されたら、パスワードを入力します。

Enter WORKGROUP\labex's password:

接続に成功すると、smbclient プロンプトが表示されます。

Try "help" to get a list of possible commands.
smb: \>

ファイルのナビゲートとリスト表示

共有に接続したので、いくつかの基本的なコマンドを試してみましょう。

現在のディレクトリ内のファイルをリスト表示するには、次のようにします。

smb: \> ls

先ほど作成したテストファイルが表示されるはずです。

  .                                   D        0  Tue Nov 30 12:00:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

リモートディレクトリの作成

SMB 共有に新しいディレクトリを作成しましょう。

smb: \> mkdir test-directory

ディレクトリが作成されたことを確認するために、内容をもう一度リスト表示します。

smb: \> ls

新しいディレクトリが表示されるはずです。

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

ディレクトリの変更

作成したばかりのディレクトリに変更しましょう。

smb: \> cd test-directory

新しいディレクトリにいることを確認します。

smb: \test-directory\> ls

出力は空のディレクトリを表示するはずです。

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

親ディレクトリに戻るには、次のようにします。

smb: \test-directory\> cd ..

smbclient 内でのヘルプの取得

smbclient 内で利用可能なコマンドを表示するには、次のようにします。

smb: \> help

利用可能なすべてのコマンドのリストが表示されます。

?              allinfo        altname        archive        backup
blocksize      cancel         case_sensitive cd             chmod
chown          close          del            dir            du
echo           exit           get            getfacl        geteas
hardlink       help           history        iosize         lcd
link           lock           lowercase      ls             l
mask           md             mget           mkdir          more
mput           newer          notify         open           posix
posix_encrypt  posix_open     posix_mkdir    posix_rmdir    posix_unlink
print          prompt         put            pwd            q
queue          quit           readlink       rd             recurse
reget          rename         reput          rm             rmdir
showacls       setea          setmode        stat           symlink
tar            tarmode        timeout        translate      unlock
volume         vuid           wdel           logon          listconnect
showconnect    tcon           tdis           tid            utimes
logoff         ..             !

探索が終わったら、smbclient セッションを終了できます。

smb: \> quit

次のステップでは、Linux システムと SMB 共有の間でファイルを転送する方法を学びます。

smbclient を使用したファイルの転送

この最後のステップでは、Linux システムと SMB 共有の間でファイルを転送する方法を学びます。

共有への再接続

SMB 共有に再度接続しましょう。

smbclient //localhost/testshare -U labex

プロンプトが表示されたら、パスワードを入力します。

Enter WORKGROUP\labex's password:

smbclient プロンプトが表示されるはずです。

Try "help" to get a list of possible commands.
smb: \>

共有へのファイルのアップロード

先ほど作成したテストファイルを SMB 共有にアップロードしましょう。まず、現在のローカルディレクトリを確認する必要があります。

smb: \> !pwd

これは、ローカルシステムで pwd コマンドを実行し、次のように表示されます。

/home/labex/project

テストファイルがあるディレクトリに変更する必要があります。

smb: \> lcd ~/project/smb-files

正しいディレクトリにいることを確認します。

smb: \> !ls

次のように表示されるはずです。

test.txt

次に、ファイルを SMB 共有にアップロードしましょう。

smb: \> put test.txt

ファイルが転送されたことを示すメッセージが表示されるはずです。

putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)

ファイルがアップロードされたことを確認します。

smb: \> ls

次のように表示されるはずです。

  .                                   D        0  Tue Nov 30 12:02:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:02:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

共有からのファイルのダウンロード

次に、SMB 共有からローカルシステムにファイルをダウンロードしましょう。まず、ダウンロードしたファイルを保存するための新しいディレクトリを作成しましょう。

smb: \> !mkdir -p ~/project/smb-downloads

そのディレクトリに変更します。

smb: \> lcd ~/project/smb-downloads

次に、ファイルをダウンロードします。

smb: \> get shared-test.txt

ファイルが転送されたことを示すメッセージが表示されるはずです。

getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)

ファイルがダウンロードされたことを確認します。

smb: \> !ls

次のように表示されるはずです。

shared-test.txt

複数のファイルに対する mget および mput の使用

mget および mput コマンドを使用すると、複数のファイルを一度に転送できます。ローカルシステムでさらにいくつかのファイルを作成してみましょう。

smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt

次に、すべての .txt ファイルを一度にアップロードしましょう。

smb: \> lcd ~/project/smb-files
smb: \> mput *.txt

各ファイルについて、確認を求められます。各転送を確認するには、Y と入力します。

mput test.txt? Y
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
mput file1.txt? Y
putting file file1.txt as \file1.txt (0.0 kb/s) (average 19.2 kb/s)
mput file2.txt? Y
putting file file2.txt as \file2.txt (0.0 kb/s) (average 12.8 kb/s)
mput file3.txt? Y
putting file file3.txt as \file3.txt (0.0 kb/s) (average 9.6 kb/s)

確認なしですべてのファイルを転送する場合は、プロンプトをオフにすることができます。

smb: \> prompt
smb: \> mput *.txt

同様に、複数のファイルをダウンロードするには、次のようにします。

smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt

完了したら、smbclient セッションを終了します。

smb: \> quit

非対話型コマンド

smbclient を使用して、対話型シェルに入ることなくコマンドを実行することもできます。たとえば、共有の内容をリスト表示するには、次のようにします。

smbclient //localhost/testshare -U labex -c 'ls'

プロンプトが表示されたらパスワードを入力すると、ディレクトリリストが表示されます。

Enter WORKGROUP\labex's password:
  .                                   D        0  Tue Nov 30 12:03:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  file1.txt                           N        0  Tue Nov 30 12:03:00 2022
  file2.txt                           N        0  Tue Nov 30 12:03:00 2022
  file3.txt                           N        0  Tue Nov 30 12:03:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:03:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

単一のコマンドでファイルをダウンロードするには、次のようにします。

smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'

このコマンドは、共有から test.txt ファイルをダウンロードし、プロジェクトディレクトリに test-download.txt として保存します。

これで、smbclient を使用して SMB 共有に接続し、ディレクトリをナビゲートし、ファイルを転送する方法を十分に理解できました。これらのスキルは、Windows/Linux 環境が混在する環境で作業する際に不可欠です。

まとめ

この実験では、Linux システムを Windows (SMB/CIFS) ファイル共有に接続するための重要なツールを提供する smbclient コマンドについて Linux で探求しました。smbclient を使用した作業のいくつかの重要な側面をカバーしました。

  1. インストール (Installation): Ubuntu 22.04 に smbclient パッケージをインストールし、その依存関係を含めました。

  2. コマンドの基本 (Command Basics): 共有への接続方法や、その中でのナビゲーションなど、smbclient で利用可能な基本的な構文とコマンドについて学びました。

  3. テスト環境のセットアップ (Setting Up a Test Environment): 外部の Windows サーバーへのアクセスを必要とせずにコマンドを練習するために、ローカル Samba サーバーを使用してテスト SMB 環境を作成しました。

  4. 共有への接続 (Connecting to Shares): テスト SMB 共有に接続し、lscdmkdir などのナビゲーションコマンドを試しました。

  5. ファイルの転送 (Transferring Files): put を使用してファイルを SMB 共有にアップロードし、get を使用してファイルをダウンロードする方法を学びました。また、mput および mget を使用した複数ファイルの転送についても調べました。

この実験で得たスキルは、Linux 環境から Windows システムまたはサーバーと対話する必要がある現実世界のシナリオに直接適用できます。システム間でファイルを転送する場合、バックアップを自動化する場合、または Linux システムを Windows ネットワークに統合する場合でも、smbclient はこれらのタスクに強力なコマンドラインインターフェイスを提供します。

より複雑なファイル操作や頻繁なファイル操作を行う場合は、ここで学んだ概念に基づいて、cifs ファイルシステムタイプを使用して mount コマンドで SMB 共有を直接 Linux ファイルシステムにマウントすることを検討してください。

Linux コマンド チートシート (Cheat Sheet)