скопировать файл из windows в Linux

16

Я пишу один сценарий. он будет работать на одной машине Linux. его цели включают в себя Linux, Solaris и Windows.

Я знаю, что могу использовать scp для копирования файлов между * nix. а как насчет копирования файла из windows?

Эти окна являются тестовыми машинами, на которых нельзя ожидать, что на них будет установлено определенное программное обеспечение, так как ОС часто переустанавливают.

Alex
источник

Ответы:

21

Используйте самбу .

Samba предоставляет сервис обмена файлами, совместимый с Windows.

Вы можете поделиться каталога (например /srv/samba/sharename) на вашем Linux компьютер и получить доступ к нему из Windows , как это: \\linuxservername\sharename. Это не требует дополнительного программного обеспечения на стороне Windows.

Samba включена в большинство дистрибутивов Linux. Установите его с помощью менеджера пакетов, например:

  • Ubuntu: sudo apt-get install samba smbclient

  • SUSE: zypper samba

  • CentOS / RedHat: yum install samba

Чтобы настроить Samba, смотрите:

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

Обратите внимание, что вам может потребоваться настроить брандмауэр Linux, если он используется, для приема соединений с портами 137 / tcp, 138 / tcp, 139 / tcp и 445 / tcp (см. Это и это ).


В приведенном выше описании компьютер с Linux является сервером Samba, и Windows монтирует с него общий ресурс.

В своем комментарии ниже вы упоминаете, что хотели бы автоматизировать процесс передачи . Это может быть достигнуто путем изменения ролей, так что Windows действует как сервер, а Linux подключается к нему с помощью smbclient.

С smbclientвами вообще не нужно монтировать общий ресурс Windows. Например, чтобы получить C:\Directory\file.txtи скопировать его /tmpна компьютер с Linux, сделайте следующее:

smbclient '//windowsserver/c$' -c 'lcd /tmp; cd Directory; get file.txt' -U administrator%password

-cКоманда для выполнения. Смотрите man smbclientподробности.

-U Имя пользователя и пароль для доступа к общему ресурсу, указанному как username%password

Измените его в соответствии со своими потребностями и добавьте в свой скрипт.

Жауме
источник
@max, спасибо за отличные ответы. Я знаю, что Samba может работать с Windows. Но это все еще требует участия человека при копировании файла. Поскольку мой сценарий будет работать на одном Linux и на машине установлена ​​samba, как я могу позволить одному сценарию выполнять копирование? Кажется, мне лучше смонтировать диск Windows в Linux, чем получить доступ к нему в Linux. Может ли самба сделать это?
Алекс
Да, Самба может сделать это. Более того, вам вообще не нужно монтировать общий ресурс Windows. Вы можете использовать smbclientдля подключения к общей папке Windows, скопировать файл и отключиться. Я отредактировал свой ответ, посмотрите на него.
Jaume
Пожалуйста, я рад, что смог помочь.
Jaume
1
Особенно -cвариант стоит использовать в простых случаях. На моей машине пароль приходит в качестве пустого аргумента (без какой-либо опции). И кроме того - я предпочитаю хранить учетные данные вдали от читателей командной строки (используя psили [h]top, например), вызывая -U $(cat .username) $(cat .password).
Томаш Гандор
3

Я знаю, что вы сказали, что не можете ожидать установки определенного программного обеспечения, но есть клиенты SSH / SCP / SFTP для Windows, которые не требуют какой-либо конкретной установки; доступен только исполняемый файл. Я постоянно обращаюсь к PuTTY с его компаньоном pscpи psftpинструментами, но я уверен, что альтернативы существуют. pscpи psftpмогут полностью управляться из командной строки, и, таким образом, хорошо подходят для задач автоматизации. Оба они даже имеют -batchпереключатель, который описывается как «отключить все интерактивные запросы» и почти наверняка может быть использован.

Поскольку у вас уже есть сервер SSH / SCP / SFTP, установленный и сконфигурированный на нем, это позволяет избежать необходимости устанавливать какое-либо программное обеспечение на каждом хосте только для копирования этих файлов.

Другим положительным моментом может быть тот факт, что PuTTY является открытым исходным кодом по разрешающей лицензии, поэтому, если она не выполняет то, что вы хотите прямо из коробки, должно быть относительно легко заставить ее действовать так, как вы предпочитаете.

CVn
источник
1
Спасибо за вашу рекомендацию. Я попробую pscp и psftp. Они также являются отличными инструментами.
Алекс
1

Я CentOS 6пользователь, поэтому я попробовал этот метод наCentOS 6

Установите самбу используя

[root @ server ~] # yum установить samba

Запрос подтверждения

[root @ server ~] # rpm -qa samba
самба-3.5.10-125.el6.i686

Создать пользователя Samba.

[root @ server ~] # useradd sambashare

Теперь создайте пароль samba для имени пользователя sambashare, используя команду smbpasswd.

[root @ server ~] # smbpasswd -a sambashare
Новый пароль SMB:
Введите новый пароль SMB:
Добавлен пользователь sambashare.

Создайте общий каталог samba

[root @ server ~] # mkdir / share

изменить владельца для общей папки

[root @ server ~] # chown -R sambashare: sambashare / share /

Откройте файл /etc/samba/smb.confи добавьте следующие строки.

[доля]
комментарий = Поделиться
путь = / поделиться
доступный для записи = да
действительные пользователи = sambashare

Запустить службу самбы

[root @ server ~] # перезапуск службы smb
Отключение услуг SMB: [OK]
Запуск сервисов SMB: [OK]

Проверьте свою конфигурацию с помощью testparmкоманды

,
,
[доля]
комментарий = поделиться
путь = / поделиться
действительные пользователи = sambashare
только чтение = нет

В системе Windows введите это в run

введите описание изображения здесь

Теперь введите samba имя пользователя и пароль

введите описание изображения здесь

Вы сделали

введите описание изображения здесь

Максимум
источник
Большое спасибо, макс. для вашего очень яркого учебника для новичка.
Алекс
@ Алекс, пожалуйста ... :-)
максимум