smbclientを使用してVirtualboxゲストからスクリプトのホストにファイルを転送する

smbclientを使用してVirtualboxゲストからスクリプトのホストにファイルを転送する

CentOS 7システムで実行されるスクリプトを開発しようとしていますが、現在はVirtualboxインスタンス(CentOS 7)でも開発中です。スクリプトは複数のタスクを処理しますが、問題になるのは、何百もの大容量ファイルをWindowsシステム(現在のPCまたはVirtualboxホスト)に送信することです。

2つの質問:

A) ファイルをホストに送信します。

現在の試みは次のとおりです。

find "${FILES_DIR}" -print0 | while read -d $'\0' file
do
  if [ ${file: -4} == ".zip" ]
  then
    smbclient //${WINDOWS_IP}/${WINDOWS_DIR} -U ${WINDOWS_USERNAME}%${WINDOWS_PASSWORD} -c "put ${file}"
  fi
done

ここで、WINDOWS_IP は enp0s3.inet で、WINDOWS_DIR はホストの共有フォルダです。問題は、接続拒否エラーが引き続き発生し、ここでどこに行くべきかわからないということです。

B)ファイル転送が成功したことを確認する

smbclientは、ファイルが正常に転送されたことを確認するために使用できるエントリを返しますか?

ベストアンサー1

(B) の場合、smbclient少なくとも一部のエラーに対して終了コードを返します。$?シェルでを使用して、最後のコマンドの終了コードを取得できます。終了コード0は「正常」を意味し、0以外の場合はエラーを意味し、私が提起したエラーの場合は1でした(ただし、他の終了コードも可能であり、すべてのエラーが終了コードを設定するわけではありません)。

(A)に記載されている「接続が拒否されました」エラーにはいくつかの原因があり、Q&Aを介してデバッグするのは困難です。どのような状況でエラーが発生したか、発生していないか、リモートpingコンピュータが機能しているか、ファイアウォール設定が確認されたかなど、少なくともいくつかの情報を提供してください。

smbclientさて、コマンドを次にパイプすることもできます。

echo "put ${file}" | smbclient "//${WINDOWS_IP}/${WINDOWS_DIR}" -U "${WINDOWS_USERNAME}%${WINDOWS_PASSWORD}"

毎回新しい接続を確立するのを防ぐため、ランダムに失敗した場合は大量のファイルを転送するのに役立つかもしれません。

すべてを正しくエスケープすることを検討してください(引用符を追加しました)。使用している実際の値が不明です。誤ったエスケープ処理によってホスト、ユーザー、またはパスワードが破損する可能性があり、エラーの原因となる可能性があります。

おすすめ記事