Подробный гайд по использованию smbclient в Linux
smbclient — это консольная утилита для работы с сетевыми ресурсами по протоколу SMB/CIFS (Server Message Block / Common Internet File System), который используется в Windows-сетях для общего доступа к файлам, принтерам и другим ресурсам. С помощью smbclient можно подключаться к общим папкам Windows или Samba-серверов, просматривать файлы, скачивать и загружать их, а также выполнять различные операции с каталогами.
Утилита входит в пакет Samba и доступна в большинстве дистрибутивов Linux.
Установка smbclient
Debian / Ubuntu
sudo apt update
sudo apt install smbclient
CentOS / RHEL / Fedora
sudo yum install samba-client # CentOS 7 / RHEL 7
sudo dnf install samba-client # Fedora / CentOS 8+
Arch Linux
sudo pacman -S smbclient
Базовый синтаксис
Классический синтаксис подключения к общему ресурсу:
smbclient //IP-адрес/Имя_ресурса -U имя_пользователя
Важно:
В большинстве версий smbclient используется двойной слеш (//), а не smb://. Некоторые сборки могут принимать и smb://, но для совместимости рекомендуется //.
После выполнения команды будет запрошен пароль. Если пароль не требуется (гостевой доступ), можно добавить -N.
Пример:
smbclient //192.168.1.100/share -U john
Введите пароль пользователя john.
Подробное описание параметров
Основные параметры
| Параметр | Описание |
|---|---|
//IP/ресурс |
Адрес сервера и имя общей папки. Например: //192.168.1.10/public |
-U <пользователь> |
Имя пользователя для аутентификации. Можно указать домен: -U DOMAIN\\user или -U user@domain |
-W <рабочая_группа> |
Указать рабочую группу (workgroup), если отличается от стандартной |
-p <порт> |
Номер порта (по умолчанию 445 для SMB, 139 для NetBIOS) |
-m <протокол> |
Максимальный уровень протокола SMB: SMB1, SMB2, SMB3 и т.д. (например, -m SMB2) |
-N |
Не запрашивать пароль (для гостевого доступа) |
--password=<пароль> или --pw |
Передать пароль в командной строке (небезопасно) |
-c <команда> |
Выполнить команду (или несколько через ;) и выйти |
-L |
Показать список доступных ресурсов на сервере (вместо подключения к конкретному ресурсу) |
-d <уровень> |
Уровень отладки (0–10) |
-A <файл> |
Файл с учетными данными (формат: username = ..., password = ...) |
-I <IP> |
Явно указать IP-адрес сервера (если используется NetBIOS-имя) |
--option="name=value" |
Переопределить любые параметры конфигурации Samba |
Примеры использования
1. Просмотр доступных общих ресурсов на сервере
smbclient -L //192.168.1.100 -U john
Вывод:
Sharename Type Comment
--------- ---- -------
public Disk Public files
docs Disk Documentation
IPC$ IPC IPC Service
2. Подключение к общей папке в интерактивном режиме
smbclient //192.168.1.100/public -U john
После ввода пароля вы попадёте в интерактивную оболочку, похожую на FTP:
smb: \>
3. Основные команды внутри smbclient
| Команда | Описание |
|---|---|
ls или dir |
Показать содержимое текущего каталога |
cd <каталог> |
Перейти в каталог |
pwd |
Показать текущий каталог |
get <файл> [локальный_путь] |
Скачать файл с сервера на локальную машину |
mget <шаблон> |
Скачать несколько файлов по маске (например, *.txt) |
put <локальный_файл> [удалённый_путь] |
Загрузить файл на сервер |
mput <шаблон> |
Загрузить несколько файлов |
mkdir <каталог> |
Создать каталог на сервере |
rmdir <каталог> |
Удалить пустой каталог |
rm <файл> |
Удалить файл |
rename <старое> <новое> |
Переименовать файл |
lcd <локальный_каталог> |
Сменить локальный каталог |
!<команда> |
Выполнить локальную команду (например, !ls) |
help |
Список всех команд |
exit или quit |
Выйти из smbclient |
4. Неинтерактивный режим (одна команда)
smbclient //192.168.1.100/public -U john -c "ls"
Можно выполнить несколько команд через точку с запятой:
smbclient //192.168.1.100/public -U john -c "cd docs; ls; get report.pdf"
5. Скачивание и загрузка файлов без интерактивного режима
Скачать файл:
smbclient //192.168.1.100/public -U john -c "get file.txt /home/user/file.txt"
Загрузить файл:
smbclient //192.168.1.100/public -U john -c "put /home/user/file.txt file_on_server.txt"
6. Рекурсивное скачивание каталога
Внутри smbclient можно использовать команду recurse и mget:
smb: \> recurse ON
smb: \> prompt OFF
smb: \> mget docs\*
Или в неинтерактивном режиме:
smbclient //192.168.1.100/public -U john -c "recurse ON; prompt OFF; mget docs\*"
Аутентификация
Вариант 1: Интерактивный ввод пароля (рекомендуется)
smbclient //server/share -U username
Пароль будет запрошен, ввод скрыт.
Вариант 2: Передача пароля в командной строке (небезопасно)
smbclient //server/share -U username%password
или
smbclient //server/share -U username --password=password
Внимание:
Пароль виден в истории команд и списке процессов. Используйте только для тестов.
Вариант 3: Файл с учетными данными (credentials file)
Создайте файл, например ~/.smbcredentials:
username = john
password = secret123
domain = WORKGROUP
Затем используйте:
smbclient //server/share -A ~/.smbcredentials
Убедитесь, что права на файл ограничены:
chmod 600 ~/.smbcredentials
Вариант 4: Переменные окружения
export USER=john
export PASSWD=secret123
smbclient //server/share -U $USER%$PASSWD
Обработка ошибок и частые проблемы
1. NT_STATUS_LOGON_FAILURE
Неправильные имя пользователя или пароль. Проверьте раскладку клавиатуры, регистр.
Если пользователь в домене, укажите домен:
smbclient //server/share -U DOMAIN\\user
или используйте формат user@domain.
2. NT_STATUS_BAD_NETWORK_NAME
Указано неверное имя общей папки (ресурса).
Проверьте список доступных ресурсов:
smbclient -L //server -U user
3. NT_STATUS_CONNECTION_REFUSED или Connection to server failed
Сервер недоступен, неправильный IP, порт заблокирован, или служба SMB не запущена.
Проверьте:
ping IPtelnet IP 445(илиnc -zv IP 445)- На сервере должен быть открыт порт 445 (SMB) или 139 (NetBIOS over TCP).
4. protocol negotiation failed: NT_STATUS_CONNECTION_RESET
Возможно, сервер требует более новый протокол SMB (SMB2/3), а smbclient пытается использовать SMB1 (или наоборот).
Укажите нужный протокол:
smbclient //server/share -U user -m SMB3
Для старых устройств (например, старые NAS) может потребоваться SMB1:
smbclient //server/share -U user -m SMB1
В новых версиях Samba SMB1 отключён по умолчанию, его можно включить в /etc/samba/smb.conf или передать --option='client min protocol=NT1'.
5. NT_STATUS_ACCESS_DENIED
У пользователя нет прав на данный ресурс. Обратитесь к администратору сервера.
6. Проблемы с кодировкой имён файлов
Если имена файлов отображаются некорректно, попробуйте указать кодировку:
smbclient //server/share -U user --option='client charset=UTF8'
Советы и рекомендации
Безопасность
- Никогда не передавайте пароль в командной строке, если это не разовое подключение в изолированной среде.
- Используйте файл credentials с правами 600.
- По возможности подключайтесь по VPN или в доверенной сети — трафик SMB может быть незашифрованным (если не используется SMB3 с шифрованием).
Автоматизация
Для автоматизации задач удобно использовать неинтерактивный режим с -c.
Можно написать скрипт:
#!/bin/bash
smbclient //server/share -A /path/to/credentials -c "cd backup; lcd /local/backup; prompt OFF; recurse ON; mget *"
Отладка
Если что-то не работает, добавьте параметр -d 3 или -d 10 для подробного вывода:
smbclient //server/share -U user -d 3
Использование smbclient для монтирования через файловую систему
Если нужен постоянный доступ, лучше использовать mount.cifs:
sudo mount -t cifs //server/share /mnt/share -o username=user,password=pass,uid=1000,gid=1000
Важно
smbclient — мощный инструмент для работы с SMB/CIFS ресурсами из командной строки. Он полезен для тестирования доступности общих папок, копирования файлов, автоматизации резервного копирования и администрирования. Освоив базовый синтаксис и параметры, вы сможете эффективно взаимодействовать с Windows- и Samba-серверами.
Для получения дополнительной информации смотрите:
man smbclient
smbclient --help
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.