環境
サーバ側
grep "PRETTY_NAME" /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
クライアント側
- OS
ver
Microsoft Windows [Version 10.0.17763.503]
- WinSCP
5.9.47333
目的
SFTPサーバのディレクトリとローカル(Windows環境)のフォルダを同期させたい
前提条件
sftpクライアントは「WinSCP」
手順
- Raspbianに接続したUSBをSFTPでアクセスできるように設定
- WinSCPのマクロスクリプトを作成する
- バッチファイルを作成する
Raspbianに接続したUSBをSFTPでアクセスできるように設定
Raspbianに接続したUSBをSFTPでアクセスできるように設定
WinSCPのマクロスクリプトを作成する
対象サーバの指紋を確認する
SFTPはSSHで接続するため、対象サーバの指紋を確認します。
$ ssh-keygen -E md5 -lf /etc/ssh/ssh_host_rsa_key.pub
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
後ほど使用するので、どこかにメモしておきます。
WinSCPのスクリプトを作成する
リモートからローカルへの完全同期で作成します。
公式サイトを参考に作成します。詳細な内容は公式サイトを確認してください。(投げやり)
以下のようにしました。
option batch on
open sftp://<対象サーバのアドレス> -hostkey="ssh-rsa 2048 XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX" -privatekey="<対象ユーザの秘密鍵のパス>"
cd "/test/"
lcd "D:\test"
synchronize local -delete -criteria=time
exit
※ 秘密鍵はputtygenで作成もしくは変換した秘密鍵でないと接続に失敗する可能性があります。
PuTTYgenで公開鍵/秘密鍵を作成する
各処理を1行ずつ説明します。
- 実行モードをバッチモードとする。
- 接続先のホストを指定する。
- リモート側のカレントディレクトリを移動する。
- ホスト側のカレントディレクトリを移動する。
- ローカルのディレクトリの同期を行う。比較基準はファイルの更新日とする。
※ ホスト側のディレクトリの指定を誤ると大変なことになります。十分に気をつけてください。
バッチファイルを作成する
WinSCP.comに引数でスクリプトのパスを渡すことで、記入したスクリプトを実行させることができます。
コマンドの引数は公式サイトを参考にします。
<WinSCPのインストールフォルダ>\WinSCP.com /command /script="<作成したスクリプトのパス>"
バッチを作成できたら、実行するだけでリモートのディレクトリをローカルに同期することができます。
おまけ。
ローカルからリモートへの完全同期を行うスクリプトの作成をします。
option batch on
open sftp://<対象サーバのアドレス> -hostkey="ssh-rsa 2048 XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX" -privatekey="<対象ユーザの秘密鍵のパス>"
cd "/test/"
lcd "D:\test"
synchronize remote -delete -criteria=time
exit
「local」を「remote」に変更するだけでOKですね。