nixp.ru v3.0

18 октября 2017,
среда,
01:34:29 MSK

DevOps с компанией «Флант»
HanTengry написал 31 марта 2009 года в 09:22 (1751 просмотр) Ведет себя как мужчина; открыл 36 тем в форуме, оставил 111 комментарий на сайте.

Как можно подключиться с сервера на SLES9, к удаленной машине(WinXP). Сервер должен время от времени выкладывать на удаленную папку файлы. То есть хочеться подцепить скрипт к cron-у, который копирует туда файлы. Соединяться кроме как по Samba больше никак не умею. Не представляю как это делать через bash.

fly4life
HanTengry
Как можно подключиться с сервера на SLES9, к удаленной машине(WinXP). Сервер должен время от времени выкладывать на удаленную папку файлы. То есть хочеться подцепить скрипт к cron-у, который копирует туда файлы. Соединяться кроме как по Samba больше никак не умею. Не представляю как это делать через bash.

Той же самбой, только в bash =). smbclient/smbmount тебе в помощь.

HanTengry

Сталкнулся с таким вопросом в пароле у меня присутствует символ «;», если вводить пароль сразу:

[user]$ /usr/sbin/smbclient //PC1/public -U user mypasswd

то говорит что неизвестная команда — указывает символы пароля за «;». Если вводить пароль не сразу [root]# smbclient -U user -L pc1, а потом при запросе то нормально подключается. Вариант смены пароля понятен, но наверно есть какие-нибудь скобки или что-то еще, для того чтобы shell воспринимал последовательность как пароль.

Дмитрий Шурупов

Кавычки обычные пробовали?

/usr/sbin/smbclient //PC1/public -U user 'my;passwd'

HanTengry

Кавычки то что нужно! Спасибо!

HanTengry

Пробую написать скрипт при запуске которого файл с данной машины копируется на удаленную.

В нем написал строчки:

smbclient //IP_host/test -U username 'passwd'

put filesuse filesuse

После отработки первой строчки на экране загорается smb: \> и вторая строчка не отрабатывает. Что нужно дописать в скрипте, как я понимаю вторая строчка уже не отрабатывается в bash? Как передать управление тому, в чем должна отрабатываться, что дописать в скрипте?

Дмитрий Шурупов

Это вам стоит почитать про UNIX shell что-нибудь фундаментальное ;-)

Следующая команда, которую вы хотите ввести, является уже не командной bash, а командой самого smbclient. Передать ее процессу с smbclient проще всего так:

echo 'put filesuse filesuse' | smbclient //IP_host/test -U username 'passwd'

(Первая команда в таком случае, естественно, уже не нужна — она «включена» в эту команду.)

HanTengry

Спасибо! Еще не понятно, команда put применяется только к файлам? Как копировать директории? Знаю что есть еще mput, но это тоже копирование именно файлов по маске. Знаю еще что директория в Linux это тоже файл..но не понял, что из этого следует..директория которую я пытаюсь скопировать командой put namedirectory namedirectory, не копируется.

Дмитрий Шурупов

Я вообще с smbclient особо не работал, но в разделе команд его мана есть такая вот запись:

recurse

          Toggle directory recursion for the commands mget and mput.

          When toggled ON, these commands will process all directories in the source directory (i.e., the directory they are copying from ) and will

          recurse into any that match the mask specified to the command. Only files that match the mask specified using the mask command will be

          retrieved. See also the mask command.

          When recursion is toggled OFF, only files from the current working directory on the source machine that match the mask specified to the mget

          or mput commands will be copied, and any mask specified using the mask command will be ignored.

Не оно ли?

HanTengry

Нашел здесь: http://linsovet.com/smbclient-upload-download-dirs

Пока не разобрался что к чему. Текст с ссылки ниже.

Копирование директорий с помощью smbclient

Часто бывает что нужно слить/залить файлы на Windows, а из SMB инструментария только smbclient. Файлы закачиваются/скачивают по аналогии с любым CLI ftp клиентом командами put/get соответственно. А вот с директориями не все так просто..

$ smbclient //win-comp-name/share

Password:

Domain=[WORKGROUP] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

smb: \> recurse

smb: \> prompt

smb: \> mget remote-dir

smb: \> mput local-dir

smb: \>

1. Первой строчкой подключаемся к удаленной Windows машине с именем win-comp-name к расшаренной папке share.

2. Вторая строчка — вводим пароль (если он есть).

3. Приглашение показывает к чему мы подсоединились.

4. Следующий строчкой командой recurse говорим что все последующие команды будут применяться рекурсивно.

5. Команда prompt отменяет запрос для каждого файла на заливку/скачивание.

6. Последующие две команды показывают как сливать и заливать директории.

то бишь для скрипта так будет:

$(echo 'recurse’; echo 'prompt’; echo 'mput DIR’) | smbclient //IP_HOST/share -u login 'passwd'

HanTengry

Нужно скопировать на удаленную машину не конкретную папку, это делается mput local-dir, а папку имя которой является текущем значением даты т.е. mput `date +’%d%m%Y’`. Как я понял smb:> это `date +’%d%m%Y’` не понимает. Что можно сделать, что почитать..

rgo

Мне кажется, что проще будет смонтировать шару в фс, а потом уже заниматься скриптописательством.

HanTengry

Еще вопрос.

Итак как я понял команда mput может видеть и брать для копирования директории только из текущего местоположения в дереве каталогов, т.е. где ты находился по дереву перед подключением к удаленной машине. Надеюсь понятно объяснил.

1. Формат команды mput local-dir, полный путь к папке как я понял указывать нельзя?

2. Если запускать команду через cron: (echo 'recurse’; echo 'prompt’; echo 'mput local-dir’) | smbclient //IP_HOST/share -u login 'passwd’, что будет являться для нее текущей директорией, в которой она будет «искать» local-dir?

splinter

напиши срипт в нем монтируй ресурс переходи в директорию и выполняй mput local-dir, патч/срипт пропиши в кроне.