Samba 共有を使用して Windows から Linux サーバーにファイルを転送するにはどうすればよいですか?

Samba 共有を使用して Windows から Linux サーバーにファイルを転送するにはどうすればよいですか?

私は職場で悪夢に直面しています。これから説明する業務を担当していた同僚が私にその責任を委ね、現在は組織を辞めています。私はこうした業務の経験がありません。知識不足と長い質問で申し訳ありませんが、どの情報を含めて、どの情報を省くべきかわかりません。

背景

サードパーティからデータを入手し、それを Postgres サーバーに送信してから Linux サーバーに取り込み、そこでシェル スクリプトによって変換を行います。データセットは結合され、その後、使用するデータ分析ツールに送信されます。このプロセスは cron を使用して自動化されています。

ただし、毎年、Linux サーバー上の一部のメタデータ csv ファイルを手動で更新する必要があります (これらはシェル スクリプトを使用してサードパーティのデータと結合されます)。

フォルダ構造:

以下は、Linux サーバーのフォルダー構造の外観です (PuTTY を使用してアクセス)。

  • 別のプロジェクト
  • 別のプロジェクト
  • 私のプロジェクト
  • 別のプロジェクト

~/私のプロジェクト>

  • シェルスクリプト
  • 調達したファイル
  • メタファイル
  • 結合されたファイル

~/メタファイル>

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

私は何をする必要がありますか

私がする必要があるのは、というファイルを追加することです2022.csvmeta_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
    
  • scp最近の Windows バージョンには、 コマンドとコマンドを備えた OpenSSH が組み込まれていますsftp。 使用方法は pscp/psftp に似ています。

  • WinSCP は優れたグラフィカル SFTP クライアントですが、自動化のためのバッチ CLI モード ( winscp.com) と .NET アセンブリも備えています。

  • 手動で GUI を使用する場合、Bitvise には SFTP もあると思います。FileZilla でもかまいません。

しかし、Linuxサーバーの場合しなければならないSMB 共有からファイルを取得し、任意の場所に配置して、Linux SMB クライアントを使用してアクセスします。たとえば、次のようなものがあります。

  • Samba からのコマンドsmbclient。1 回限りのジョブには適していますが、自動化するのは困難です。

    $ smbclient //smb.comp.com/prod -U someuser
    smbclient> get 2022.csv
    
  • カーネルレベルsmb3cifsマウント。自動化には適していますが、初めてセットアップするには 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-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)
    

(python-smbprotocolを使用してファイルをコピーするLinux cronjobがいくつかありますWindows サーバー、そして python-pypsrp を使用してそれらの Windows システム上でコマンドをリモートで実行します。

関連情報