同じ資材を複数のサーバにSCP(パスワード認証)で転送する方法です。
WinSCPスクリプトのみ使用します。
はじめに
業務でシステム更改案件が増えてきていますが、特にセキュリティに関わる部分について現行の仕組み・運用を変えたくないという場面によく遭遇します。
各サーバへの資材リリースも、「Jenkinsを導入してscpジョブを作る」ことは出来ず、現状使っているツールのみで効率化する必要があったりします。
- リリース端末のOSはWindows10「OpenSSH 7.7」標準搭載
- サーバへのSSH接続の認証方式はパスワード認証方式
- リリース端末は閉域網にありソフトウェアのインストールはハードルが高い
- WinSCPは既に使っているため使用可能
リリース端末に「OpenSSH 7.7」が標準搭載だったためこれを使用し、パスワードは自動入力にしようとしました。
が、WindowsコマンドプロンプトやPowerShellでパスワード自動入力をソフトウェアの追加なしで行おうとしましたが上手くいかずorz
切り替えて、WinSCPスクリプトを作って転送することにしました。
ソースコード
WinSCPスクリプト
原則、どのサーバに対しても「同じ資材を同じ場所に転送する」という前提で、資材転送先サーバで行う操作を記載します。
各設定値の詳細は公式サイトで確認できます。
認証情報ファイル
SSHの認証情報を記載したファイルを用意します。
WindowsBatch
認証情報ファイル(connectInfo.dat)を読み込み、ファイルの行単位にサーバに接続し、WinSCPスクリプト(fileSend.scr)を実行します。
実行方法
前提)
「C:\Program Files (x86)」配下に「WinSCP」フォルダが来るように「WinSCP」をインストールしておく
実行方法)
fileSend.scr、connectInfo.dat、fileSend.batを同じフォルダに格納し、「fileSend.bat」をダブルクリックする。
WinSCPスクリプトでループ処理はできるか
転送先サーバ内の複数のディレクトリに資材を転送することを想定したら、WindowsBatchから転送先ディレクトリ/転送資材の情報をパラメータで渡し、WinSCPスクリプト内でループ処理したい考えますが、WinSCP日本語Wikiを見る限りWinSCPスクリプト単体でのループ処理は出来ないようです。
代わりに、「WinSCPnet.dll」というライブラリが用意されているので、これをPowerShellなどから呼ぶ出すことでループ処理などを実現できるようです。
鍵認証方式の場合
今回、SSHが「パスワード認証方式」であったためWinSCPスクリプトを使用しましたが、SSHが「鍵認証方式」の場合はWindows10の「OpenSSH 7.7」をPowerShellで使用して実現する方が、ループ処理や条件分岐なども記述出来て汎用性高く作れるかと思います。
コメント