如何使用 samba 共享將檔案從 Windows 傳輸到 Linux 伺服器?

如何使用 samba 共享將檔案從 Windows 傳輸到 Linux 伺服器?

我在工作中面臨一場惡夢。一位負責我將在下面描述的內容的同事將這項職責交給了我,但現在已經離開了公司。我沒有做這些事情的經驗。請原諒我缺乏知識和長問題 - 我不確定要包含/省略哪些資訊。

背景

我們從第三方獲取一些數據,這些數據被發送到 postgres 伺服器,然後帶入 Linux 伺服器,其中一些 shell 腳本進行一些轉換。然後將資料集組合起來,然後將其發送到我們使用的資料分析工具。該過程使用 cron 自動化。

然而,每年,我們都需要手動更新Linux伺服器上的一些元資料csv檔案[這些檔案使用shell腳本與第3方資料結合]。

資料夾結構:

下面是 Linux 伺服器資料夾結構的樣子 [使用 PuTTY 存取]:

  • 另一個項目
  • 另一個項目
  • 我的項目
  • 另一個項目

〜/我的專案>

  • shell_scripts
  • 採購文件
  • 元檔案
  • 組合文件

〜/元文件>

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

我需要做什麼

我需要做的是新增一個名為2022.csv到meta_files 資料夾。我的本機系統上有該檔案。在我同事的交接文件中,他只是簡單地說「使用samba共享將檔案複製到linux」。我找到了 samba 共用位置並在我的 Windows 資源管理器上進行了設定。它的地址如下所示:\\smb.comp.com\prod。這裡有各種類型的資料夾。

我懷疑我必須把2022.csv檔案位於 samba 共享中的某處,然後使用 PuTTY 在 Linux 伺服器上執行命令。但是,我不知道將其放在哪裡以及運行什麼命令。

對於這麼長的問題和過度的描述,我再次表示歉意。任何有關如何將 2022.csv 檔案載入到 Linux 上的幫助將不勝感激。如果需要任何其他信息,請告訴我。非常感謝。

答案1

如果您已經使用 SSH 存取 Linux 伺服器,請反其道而行 – 透過 SFTP 連接到 Linux 伺服器以直接上傳文件。通常,所有接受 SSH 的伺服器也接受 SFTP 連線。

  • PuTTY 附帶pscppsftp命令(可以使用您現有的 SSH 金鑰和所有內容)。

    C:\> pscp 2022.csv user@yourserver:~/my_project/meta_files/2022.csv
    
  • 最近的 Windows 版本內建了 OpenSSH,帶有scpsftp命令。它們的用法與 pscp/psftp 類似。

  • WinSCP 是一個很好的圖形化 SFTP 用戶端,而且還具有批次 CLI 模式 ( winscp.com) 和用於自動化的 .NET 組件。

  • 對於手動 GUI 使用,我認為 Bitvise 也有 SFTP。 FileZilla 也可以。

但如果是Linux伺服器必須從 SMB 共用中提取檔案 - 將其放在您想要的任何位置,然後使用 Linux SMB 用戶端存取它。有好幾種,例如:

  • 來自 Samba 的命令smbclient。適合一次性工作,但不適合自動化:

    $ smbclient //smb.comp.com/prod -U someuser
    smbclient> get 2022.csv
    
  • 內核級smb3cifs掛載。自動化的好選擇,但首次設定需要 Linux 系統上的 root 權限。

    $ 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-smbprotocol”模組的自訂 Python 腳本。有利於自動化:

    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)
    

(我們有幾個 Linux cronjobs 使用 python-smbprotocol 複製文件Windows 伺服器,然後使用 python-pypsrp 在這些 Windows 系統上遠端執行命令。

相關內容