コマンドプロンプト SCP バッチ

【概要】
Windosのコマンドプロンプトにて、LinuxとWindows間でファイルをSCP(送受または受信)でコピーします。
コマンドプロンプトのSCPコマンドおよびSSHコマンドを利用します。

【動作環境】
下記で動作確認を行いました。
■Windows側:Windows10 Pro、Windows11 Pro
 ※コマンドプロンプトでSSH、SCPが使えるかどうかは、コマンドプロンプトにて下記を実施してご確認ください。
  「ssh」を入力してEnter→「usage: ssh」と表示
  「scp」を入力してEnter→「usage: scp」と表示
■Linux側:Ubuntu 22.04、Amazon Linux 2023

【作成手順】
1.任意のフォルダ名でフォルダを作成します。
2.テキストエディタ(メモ帳など)を開きます。
3.下記の「【scp_winlin2.bat】」の内容をテキストに貼り付けます。
4.以下の箇所を更新します。記入方法は該当箇所の記載例(「example」の箇所)を参照ください。
  ※SCP_SOURCE、SCP_TARGETのどちらか片方はLinux、もう片方はWindowsの記載方法で記載する必要があります。

set SCP_SOURCE=""
set SCP_TARGET=""
set SCP_SSH_KEY=""

5.作成したテキストを、作成したフォルダにファイル名「scp_winlin2.bat」で保存します。

【scp_winlin2.bat】


@echo off
REM ################################################
REM ### Windows batch for Windos-Linux scp
REM ################################################

REM change directory
cd /d %~dp0

REM logfile path
set BAT_LOGFILE="%~dp0scp_winlin2_bat.log.txt"

REM scp source
REM example 1(set SCP_SOURCE="C:\Users\testuser\Desktop\scp_source")
REM example 2(set SCP_SOURCE="ubuntu@192.168.1.10:/home/ubuntu/scp_source")
set SCP_SOURCE=""

REM scp target
REM example 1(set SCP_TARGET="ubuntu@192.168.1.10:/home/ubuntu/scp_target")
REM example 2(set SCP_TARGET="C:\Users\testuser\Desktop\scp_target")
set SCP_TARGET=""

REM ssh key
REM example (set SCP_SSH_KEY="C:\Users\testuser\Desktop\scp_key\sshkey.pem")
set SCP_SSH_KEY=""

echo %date% %time% INFO: SCP Start[%SCP_SOURCE% to %SCP_TARGET%] >> %BAT_LOGFILE%

REM run scp
scp -r -i %SCP_SSH_KEY% %SCP_SOURCE% %SCP_TARGET% >> %BAT_LOGFILE% 2>&1

REM return code check
if %errorlevel% equ 0 (
  echo %date% %time% INFO: SCP End[%SCP_SOURCE% to %SCP_TARGET%] >> %BAT_LOGFILE%
) else (
  echo %date% %time% ERROR: SCP End[%SCP_SOURCE% to %SCP_TARGET%] Return code %errorlevel% >> %BAT_LOGFILE%
)

echo %date% %time% INFO: Script End. >> %BAT_LOGFILE%

exit /b

【実行準備】
※初回実行前に1度だけ、バッチを手動実行するか、SSH公開鍵認証方式でSCP先のサーバに接続しておく必要があります。
 known_hostsファイルに登録しておくためですので、一度実施したら繰り返し実施する必要はありません。

◆バッチを手動実行する場合
「Are you sure you want to continue connecting (yes/no/[fingerprint])?」で「yes」を入力して「Enter」キーを押下します。

◆SSH接続する場合
1.Windowsのコマンドプロンプトにて、下記のコマンドを実行します。

ssh -i <SSH接続用秘密鍵ファイルのフルパス> <ユーザ名(例:ubuntu)>@<IPアドレス>

2.初回接続時に下記が表示された場合「yes」を入力してEnterキーを押下します。

This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

3.正常に接続できると、プロンプトの末尾が「>」から「$」にかわります。
4.下記コマンドでSSH接続を終了します。

exit

【実行手順】
1.「scp_winlin2.bat」をダブルクリックして実行します。
2.「scp_winlin2_bat.log.txt」が作成されるので、実行結果を確認します。

【その他】
・「SCP_TARGET」で指定するディレクトリやフォルダは、SSH接続時に作成を行わないため、存在するものを指定する必要があります。
・Linuxに対してSSH実行するユーザに、接続先のディレクトリへの書き込み権限がない場合、「Permission denied」となり処理が失敗することがありますのでご注意ください。