はじめに
この実験(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 システム間のファイルの転送
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 を使用した作業のいくつかの重要な側面をカバーしました。
インストール (Installation): Ubuntu 22.04 に
smbclientパッケージをインストールし、その依存関係を含めました。コマンドの基本 (Command Basics): 共有への接続方法や、その中でのナビゲーションなど、
smbclientで利用可能な基本的な構文とコマンドについて学びました。テスト環境のセットアップ (Setting Up a Test Environment): 外部の Windows サーバーへのアクセスを必要とせずにコマンドを練習するために、ローカル Samba サーバーを使用してテスト SMB 環境を作成しました。
共有への接続 (Connecting to Shares): テスト SMB 共有に接続し、
ls、cd、mkdirなどのナビゲーションコマンドを試しました。ファイルの転送 (Transferring Files):
putを使用してファイルを SMB 共有にアップロードし、getを使用してファイルをダウンロードする方法を学びました。また、mputおよびmgetを使用した複数ファイルの転送についても調べました。
この実験で得たスキルは、Linux 環境から Windows システムまたはサーバーと対話する必要がある現実世界のシナリオに直接適用できます。システム間でファイルを転送する場合、バックアップを自動化する場合、または Linux システムを Windows ネットワークに統合する場合でも、smbclient はこれらのタスクに強力なコマンドラインインターフェイスを提供します。
より複雑なファイル操作や頻繁なファイル操作を行う場合は、ここで学んだ概念に基づいて、cifs ファイルシステムタイプを使用して mount コマンドで SMB 共有を直接 Linux ファイルシステムにマウントすることを検討してください。



