Как перенести файл с сервера Windows на Linux с помощью Samba Share?

Как перенести файл с сервера Windows на Linux с помощью Samba Share?

Я столкнулся с кошмаром на работе. Коллега, ответственный за то, что я собираюсь описать ниже, передал эту ответственность мне и теперь покинул организацию. У меня нет опыта в выполнении чего-либо из этого. Пожалуйста, извините меня за мою неосведомленность и длинный вопрос — я не уверен, какую информацию включить/опустить.

Фон

Мы получаем некоторые данные от третьей стороны, которые отправляются на сервер postgres, а затем переносятся на сервер linux, где некоторые скрипты оболочки выполняют некоторые преобразования. Затем набор данных объединяется, после чего он отправляется в используемый нами инструмент анализа данных. Процесс автоматизирован с помощью cron.

Однако каждый год нам приходится вручную обновлять некоторые CSV-файлы метаданных на сервере Linux [они объединяются со сторонними данными с помощью скрипта оболочки].

Структура папок:

Ниже представлена ​​структура папок сервера Linux [доступ с помощью PuTTY]:

  • другой_проект
  • другой_проект
  • мой проект
  • другой_проект

~/мой_проект>

  • shell_скрипты
  • закупленные_файлы
  • мета_файлы
  • комбинированные_файлы

~/мета_файлы>

  • 2019.csv
  • 2020.csv
  • 2021.csv

Что мне нужно сделать

Мне нужно добавить файл под названием2022.csvв папку meta_files. У меня есть файл на локальной системе. В документе о передаче моего коллеги он просто говорит "скопировать файл в Linux с помощью общего ресурса Samba". Я нашел местоположение общего ресурса Samba и настроил его в своем проводнике Windows. У него есть адрес, который выглядит так:\\smb.comp.com\prod. Здесь есть разные виды папок.

Я подозреваю, что мне придется разместить2022.csvфайл где-нибудь в общем ресурсе samba, а затем выполнить команду на сервере linux с помощью PuTTY. Однако я понятия не имею, куда его поместить и какую команду запустить.

Я снова извиняюсь за такой длинный вопрос и чрезмерное описание. Любая помощь с тем, как мне перенести файл 2022.csv на Linux, была бы очень признательна. Пожалуйста, дайте мне знать, если потребуется какая-либо дополнительная информация. Большое спасибо.

решение1

Если вы уже используете SSH для доступа к серверу Linux, сделайте наоборот — подключитесь к серверу Linux через SFTP напрямуюзагрузитьфайл. Как правило, все серверы, которые принимают SSH, также принимают SFTP-подключения.

  • PuTTY поставляется с командами pscpи psftp(которые могут использовать ваши существующие ключи SSH и все такое).

    C:\> pscp 2022.csv user@yourserver:~/my_project/meta_files/2022.csv
    
  • Последние версии Windows поставляются со встроенным OpenSSH с командами scpи sftp. Их использование похоже на pscp/psftp.

  • WinSCP — хороший графический клиент SFTP, но также имеет пакетный режим CLI ( winscp.com) и сборку .NET для автоматизации.

  • Для ручного использования GUI, я думаю, у Bitvise есть SFTP. FileZilla тоже подойдет.

Но если сервер Linuxдолженвытащите файл из общего ресурса SMB – поместите его куда хотите, затем используйте клиент Linux SMB для доступа к нему. Есть несколько, например:

  • Команда smbclientиз Samba. Хорошо подходит для разовых работ, но неприятна для автоматизации:

    $ smbclient //smb.comp.com/prod -U someuser
    smbclient> get 2022.csv
    
  • Уровень ядра smb3и cifsмонтирования. Хороший выбор для автоматизации, но для первой настройки требуются права root в системе Linux.

    $ sudo mount -t smb3 //smb.comp.com/prod /mnt/thesmbserver [options...]
    $ cp -av /mnt/thesmbserver/2022.csv ~/my_project/meta_files/
    $ sudo umount /mnt/thesmbserver
    

    (Если общий ресурс SMB не поддерживает SMB3, используйте старый cifsтип.)

  • Пользовательский скрипт Python, использующий модуль "python-smbprotocol". Подходит для автоматизации:

    import os
    import shutil
    import smbclient
    import time
    
    thisyear = time.strftime("%Y")
    remote = r"\\smb.comp.com\prod\%s.csv" % thisyear
    local = os.path.expanduser("~/my_project/meta_files/%s.csv" % thisyear)
    
    with smbclient.open_file(remote, "rb") as remote_fh:
        with open(local, "wb") as local_fh:
            shutil.copyfileobj(remote_fh, local_fh)
    

(У нас есть несколько заданий cron для Linux, которые используют python-smbprotocol для копирования файловк(Серверы Windows, а затем python-pypsrp для удаленного запуска команд на этих системах Windows.)

Связанный контент