バッチ内にパスワードを記載してscpを使用(PuTTY)
※ 以下の方法はセキュアーなローカル環境でのみ使用して下さい。間違っても公開される物で使用してはいけません!
プログラマというのは何でもかんでも自動化したい生き物なので、バッチが大好物。例えばプログラムをビルドし、成果物をまとめ、Zip圧縮し、リモート先のサーバーPCにアップ。そんな手順が毎日のように発生する場合、それを毎度手で行うなど断じて許せない、何が何でもバッチ化しようと燃える人種なんですw
で、上の中で問題なのがサーバーPCへのコピー。定番はscp(secure copy)なんですが、これ引数にパスワードを渡せません。これはセキュリティー面からすると納得の仕様なのですが、いかんせんパスワードの所でバッチが止まり手入力を要求されては、バッチを組んでいる意味がありません。勿論公開鍵を作ってSSH接続を仕込んでおけばscpの認証も自動化されます。これサーバーがlinuxなら簡単なんですが、それがWindowsサーバーだと何だかとっても面倒なんです(-_-;。
バッチ内にパスワードを組み入れてscpの所も全自動にしたい…。今回はそんなお話です。
PuTTYのpscp.exeを使う
Windowsもscpをサポートしていますが、これは先に言ったようにパスワードを引数に取れないので、代わりにPuTTYのpscp.exeを使います。こちらはパスワードを引数に取れます!
PuTTYをお持ちでない方は以下のサイトからダウンロードできます:
最新版のパッケージをインストールして下さい。デフォルトでC:\Program Files\PuTTYに入るんじゃないかなと思います。インストールフォルダ内にpscp.exeがあります。これをWindowsのscpの代わりに使います。
例えばカレントディレクトリにあるtext.txtをSCPサーバーが起動しているWindows PC(192.168.11.23)に対してユーザー名marupeke、パスワード"hogehoge"でアクセスし、C:\workフォルダ下にscpするには以下のようなコマンドを入れます:
pscp.exe -pw "hogehoge" text.txt marupeke@192.168.11.23:C:/work/text.txt
-pwオプションの後にWindows機にログインする時のパスワードを直書きします。これをバッチで組んだ場合、ユーザ名もパスワードもテキストで書き込まれるのでセキュリティー面で大変宜しくありません。なのでセキュアーなローカル環境(自分が楽したいがためのみ)でのみ使用するようにして下さい。
勿論相手サーバーがlinuxでもpscp.exeは使えます。コピー先の指定の仕方がWindowsと違ってrootベース(~/work/text.txt)になりますのでご注意ください。
終わりに
自分も相手もWindowsだったらフォルダーを共有化すればいいじゃん、と思った方もいらっしゃるかもしれません。違うのです、プログラマはそれすらも「めんどくさー」って思う怠惰な人種なんです(^-^;。理想はバッチファイルをダブルクリックするか、ターミナルでタン、タン!
僕のケースですがそれとは別の理由がありまして、コピー元のクライアントWindows機がちょっとネットワーク周りの変更が効かない特殊な物で、サーバーになっている外部のWindows PCと共有化が出来ない縛りがあったんです。仕方ないので最初はGoogle Driveとか経由していたんですが「めんどくせーー!」っとなりましてscpを使おうと。コマンドを叩いたらscpならサーバーにコピー可能だとわかりキタコレと思ったのですが、最後にこの「パスワードだけ手入力問題」にぶち当たったというわけです。
何度も言いますが、この方法は極めて脆弱です。セキュアーな閉じたローカル環境でのみ使うようにして下さい。
ではまた(^-^)/