毎日、SFTPで自動的にwindowsPCにファイルをダウンロードする

こんにちは。
近頃たまに仙川のkohukuでカフェ店員やってます。新人ですが、美味しいご飯を作りそうなふくよかさは備えてます。

mise

LinuxサーバーからSFTPで、一日一回、自動的にwindowsPCにファイルをダウンロードするバッチを作ったのですが、(楽をしようと思ったのに)ちょこちょこっとパスやファイル名だけ修正して、ほぼコピペで使えるようなものをぐぐって見つけられなかったので、今後の使い回しのために書いておきます。

要・winSCP

インストールしておいてください。FTPだけでなく、安全性の高いSFTPで接続できるソフトです。
GUIを使うことが多いですが、今回はこれのコマンドモードを使っています。

用意するファイルは二つ。

vpsbackup.bat

バッチファイルです。VPSのバックアップISOを落とすためなのでこの名前ですが(※)、何でもいいです。

vpsbackup_sftp.txt

winSCP用のsftpのコマンドです。ファイル名どころか拡張子もなんでもいいのですが、この例で書きます。

一行ずつ、解説と変更するところを。

まずはバッチ。

“C:\Program Files (x86)\WinSCP\WinSCP.exe” /console /script=”C:\batch\vpsbackup_sftp.txt”

WinSCPをコマンドモードで起動しています。/console をつけて起動するだけでいいのです。
Program Files近辺は、WinSCP.exeファイルのあるパスに、環境に合わせて変更してください。この例はwindows8です。
/script=”C:\batch\vpsbackup_sftp.txt” は、もう一つのファイルを呼び出して、起動しています。中身は、winSCPのコマンドです。パスと名前を、実際のファイル名に変えてください。この例だと、C直下のbatchディレクトリに入っています。

F:
cd sakuravps

順序としては、一行目で呼び出したSFTPのコマンドがすべて終わってから、実行されますが、ファイル順に解説……というほどでもないですね。
バッチのカレントディレクトリを、Fドライブのsakuravpsディレクトリに移動しているだけです。(さくらインターネットのVPSなのでこの名前です)

ren vpsdisc.iso vpsdisc%date:~0,4%%date:~5,2%%date:~8,2%.iso

ダウンロードしてきたファイルがvpsdisc.isoというファイルなので、それに日付をつけてrenameしています。毎日実行するので、上書きされないように日付をつけています。
ren … リネーム(renameでもOK)。名前の変更。「ren 元ファイル名 新ファイル名」という書き方です。

%date:~0,4%%date:~5,2%%date:~8,2% 。これは、日付を取り出す「%date%」本来の結果は「2017/01/16」という文字列ですが、0文字目から4文字5文字目から2文字……というように指定した文字だけ取得して、つなげて、20140116という文字列にしています。
環境によって、「%date%」の値が変わる可能性があるので、必ずコマンドプロンプトで、「echo %date%」と打ってみて、どんな文字列が帰ってくるかを確認して、適宜、取り出す文字の開始位置と文字数を0,4や5,2から変えてください

次に、SFTPのコマンド。詳しくはこちらを。 => winSCPのコマンドリファレンス

option batch on

バッチモードで実行するので、○○しますか? のような確認をいちいちしなくなります。

open sftp://username:password@123.456.789.012:22

SFTPのログインです。username:passwordは見ての通りユーザー名とパスワードです。
winSCPのGUIはrootで入れないのですがコマンドのことはわかりません。サーバーの方でもrootで直接ログインすることを禁止しているため、その設定を変えないと検証できないので、面倒なので試していません(※)。
123.456.789.012 も、実際のアドレスに変更してください。SFTPのポートが22でないときは、22も変更してください。

cd /backup (※)

サーバー側のカレントディレクトリを、落としたいファイルのあるところに移動しています。環境に合わせて変えてください。

lcd “F:\sakuravps”

ローカル側のカレントディレクトリを移動。バッチ本体でも登場した場所です。

get vpsdisc.iso

vpsdisc.isoというファイルをダウンロードします。実際に落としたいファイル名に変えてください。

exit

winSCP終了。

 

タスクスケジューラ

ファイルを用意できたので、バッチを毎日実行する設定をします。
windowsのタスクスケジューラ起動。アプリとか検索できるところで、「タスク」って打つと候補に「タスクスケジューラ」が出てくるはずです。

「タスクの作成」ボタンから、作成したバッチファイルを登録する画面が出ます。

「トリガー」タブ : 「新規」から登録。毎日、サーバーでのバックアップの一時間後に指定しました。

「操作」タブ : 「新規」から登録。下図のように。パスやバッチのファイル名は、実際に作成したものに変えてください。

batchtask

あとのタブは、適当に。

 

(※)

VPSのバックアップは、ほとんど、こちらのサイトをそのまま真似させていただいたので、ここには書きません。

さくらVPS上のOSを丸ごとバックアップする 

リストアの手前までです。

ただし、wget ftp://ftp.mondorescue.org~はOSのバージョンによって変わります。FTPから、バージョンをディレクトリでたどって、mondorescue.repoというファイルを探してください。
というか、よほどマイナーでない限りは、OSのバージョンとmondorescueでぐぐれば、パスを書いてくださっているサイトがいくつか出ると思われます。

あとは、今後の流用のために、コピペできるようにしておきたい変更点だけ書いておきます。

isoのファイル名を自分がわかりやすいように、mvコマンドで変えました。

あとは、winSCPのsftpコマンドではsuやsudoが使えないので、rootでないsftpログインユーザーでもファイルをダウンロードできるように、フォルダの所有グループとアクセス権を変えておきました。sftpでログインするusernameさんは、wheelグループに所属しています。

 

後日談

【補足】あのバッチ処理をwindows7&office2016に移した