2015-02-24 1 views
2

У меня есть скрипт, который я использую, чтобы получить доступ к SMB Client:SMB Client команды через Shell Script

#!/bin/bash 
cd /home/username 
smbclient //link/to/server$ password -W domain -U username 
recurse 
prompt 
mput baclupfiles 
exit 

Прямо сейчас, скрипт работает, получает доступ к серверу, а затем запрашивает для ручного ввода команд.

Может кто-то показать мне, как получить команды recurse, prompt, mput baclupfiles и exit команды, которые будут выполняться с помощью сценария оболочки, пожалуйста?

ответ

7

Я разработал решение для этого и передал будущие ссылки.

#!/bin/bash 
cd /home/username 
smbclient //link/to/server$ password -W domain -U username << SMBCLIENTCOMMANDS 
recurse 
prompt 
mput backupfiles 
exit 
SMBCLIENTCOMMANDS 

Это позволит вводить команды между двумя SMBCLIENTCOMMANDS отчетности в smb терминала.

+0

Возможно ли использовать этот метод heredoc, но с помощью команды stdin ввести пароль (т. Е. Не передавать параметр пароля)? Похоже, должно быть, но это может быть немного умственно. – c24w

2

Я использовал бы другой подход, используя autofs с кем-л. Затем вы можете устранить подобный подход smbclient/ftp и реорганизовать сценарий оболочки для использования других функций, таких как rsync, для перемещения файлов. Таким образом, ваши учетные данные также не сохраняются в самом скрипте. Вы можете похоронить их где-нибудь на вашем fs и сделать это только для чтения root, и никто другой.

+0

Оцените это, но я предпочел бы использовать мой сценарий, если это возможно. –

+0

Любая конкретная причина, почему? – dft99

+0

Не совсем, более просто из-под контроля, когда скрипт был написан на 95%. Спасибо за ваш вклад. –

2

smbclient принимает флаг -c для этой цели.

-c|--command command string 
     command string is a semicolon-separated list of commands to be executed instead of 
     prompting from stdin. 
     -N is implied by -c. 

     This is particularly useful in scripts and for printing stdin to the server, e.g. 
     -c 'print -'. 

Например, вы можете запустить

$ smbclient -N \\\\Remote\\archive -c 'put /results/test-20170504.xz test-20170504.xz' 

smbclient отключается, когда он завершит выполнение команды.

Смежные вопросы