소개
이 랩에서는 Linux smbclient 명령과 그 실용적인 응용 프로그램을 살펴봅니다. smbclient 유틸리티는 Linux 시스템이 Windows 파일 공유 (SMB/CIFS 공유) 와 상호 작용할 수 있게 해주는 강력한 도구입니다. SMB (Server Message Block) 는 Windows 가 파일 공유에 사용하는 네트워크 프로토콜이며, smbclient를 사용하면 Linux 사용자가 이러한 공유에 액세스할 수 있습니다.
Ubuntu 22.04 시스템에 smbclient를 설치하는 것으로 시작하여, 명령의 기본 구문을 배우고, Windows 공유에 연결하고, 디렉토리를 탐색하고, 파일을 전송하는 방법을 시연합니다.
이 랩을 마치면 다음을 수행할 수 있습니다.
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에 사용할 수 있는 모든 옵션을 보려면 도움말 명령을 사용하십시오.
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와 같은 간단한 암호를 입력합니다 (두 번 입력해야 합니다).
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 에서 smbclient 명령을 탐구했습니다. 이 명령은 Linux 시스템을 Windows (SMB/CIFS) 파일 공유에 연결하는 데 필수적인 도구를 제공합니다. 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 파일 시스템에 직접 마운트하는 것을 탐구할 수 있습니다.



