【bat】(ある程度)セキュアなファイル転送を自動で行うbat ~WinSCP公開鍵転送の自動化~

【コマンド、ツールの概要】
・インストール済みのWinSCPを利用して公開鍵を使ったファイル転送を行うbat。
WinSCPのインストールは簡単ですが、セッティングは以下につまずいたりしました。
 1 公開鍵は接続先のログインユーザのフォルダに「.ssh」フォルダを作ってそこに入れる。
 2 秘密鍵は接続時にローカルのものを指定する。
 3 WinSCPで(接続後に行いたい処理の)スクリプトを書いたtxtを「/script」オプションで呼び出す。
 4 秘密鍵パスフレーズは実は直で指定可能(←頑張ったほめて。でもこの方法がセキュアかどうかは疑問)
 5 文字化け(特にプロンプト表示)はある程度はあきらめる()

【環境(使っている環境)】
Windows Server 2008R2 to Windows Server 2016
WinSCP 5.13.4(ビルド8731)

【bat(WinSCPの呼び出し、「D:\WinSCP_SEND\TempTSV_Send\」にあるファイルを転送(同期)する)】

REM 日時設定(出力ファイル名に設定)
SET Date_Tmp=%date:/=%
SET Time_Tmp=%time:~0,2%%time:~3,2%
SET Time_Tmp=%Time_Tmp: =0%

REM フォルダ設定
SET BATFOL=D:\WinSCP_SEND\bat\
SET LOGFOL=D:\WinSCP_SEND\log\
SET SENDFOL=D:\WinSCP_SEND\TempTSV_Send\

REM WinSCP設定
SET WINSCPPRG="C:\Program Files (x86)\WinSCP\winscp.com"
SET SCRIPTTXT=%BATFOL%syncFileswithWinSCP.txt
SET XMLLOG=%LOGFOL%Up_log%Date_Tmp%_%Time_Tmp%.xml

REM winSCP送信(D:\GSMS\TempTSV_Send\内に「.tsv」があれば同フォルダのファイルを全部転送したい)
If exist %SENDFOL%*.tsv (
	%WINSCPPRG% /console /script=%SCRIPTTXT% /xmllog=%XMLLOG%
)

If %ERRORLEVEL% equ 0 (
	REM エラーがなければoldフォルダへ退避処理。ここはよしなに。robocopy /?でコマンド詳細を確認してね
	robocopy %SENDFOL% %SENDFOL%old\ *.tsv /Z /MOV /V /is
) else (
	REM <ここにエラー処理、WinSCPはエラったら0以外を返す>
)

exit

【syncFileswithWinSCP.txt(WinSCPスクリプト)】

option batch on
option confirm off
open sftp://リモートユーザID:リモートログインパスワード@XXX.XXX.XXX.XXX/ -rawsettings FSProtocol=2 -privatekey="秘密鍵パス\himityu.ppk" -passphrase=himityu.ppkのパスフレーズ
cd ..\..\temp\Uploaded
lcd D:\WinSCP_SEND\TempTSV_Send\
synchronize remote
close
exit


【使用方法】
・それぞれソースをコピペして拡張子を「.bat」「.txt」にして保存します。
・それぞれのファイルパス、フォルダパスに不備がないようにします。(フォルダがない場合の処理などは入れてません)
・batを実行します。

【説明】
いきなりこれを使う前に作成した秘密鍵と公開鍵が実際に使えるかを、WinSCPGUIで設定して確認したほうが良いと思います。
WinSCPのコマンドについてはリファレンス参照で。
ざっくり、[openで接続を開く] → [cdでリモートディレクトリを指定] → [lcdでローカルディレクトリを指定] → [synchronize remoteでリモートをローカルに合わせる]
ていう処理の流れです。

【総評】
とにかく文字化けに苛まれるので起きている問題の把握が難しいです。
秘密鍵パスフレーズの自動入力はPageantPuTTYの認証エージェント)が使えるなら素直にそれ使ってもいいかもしれません(常時起動が必須?)。
スクリプト直書きは企業での要件に耐えるかは保証できませんね。
VPN環境の構築が難しい場合はこういう仕組みも一考する必要がありますね。

【参考サイト】
WinSCP日本語Wiki - WinSCP Wiki - WinSCP - OSDN

WinSCP の使い方から設定まで全てが分かる記事まとめ

ネットワーク関連/WinSCP利用時の文字化け対策 - Windowsと暮らす

コマンドプロンプトの文字コードを変える方法 - [コマンドプロンプト・バッチ/Windows] ぺんたん info