バッチ内にパスワードを記載して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ならサーバーにコピー可能だとわかりキタコレと思ったのですが、最後にこの「パスワードだけ手入力問題」にぶち当たったというわけです。

 何度も言いますが、この方法は極めて脆弱です。セキュアーな閉じたローカル環境でのみ使うようにして下さい。

ではまた(^-^)/

この記事が気に入ったらサポートをしてみませんか?