SSHでサーバに接続して毎日自動でファイルを取得するシェルスクリプトを作成頂けませんでしょうか - nagaguchanの提案

SSHでサーバに接続して毎日自動でフ... - nagaguchanさんの提案詳細

提案文 :
1.概要
sshでのコピーコマンドとしてscpコマンドがあり、これを利用します。
ですが、単純にコマンドを実行するだけですとパスワードを聞かれてしまい、シェルスクリプトはそこで入力待ちになってしまい自動実行はできません。
そこで、自動化するにはホストベース認証かパスフレーズなしの公開鍵認証の設定をし、パスワードを入力をせずにsshできる必要があります。
シェルスクリプト自体より、こちらが肝になると思います。


2.具体策

・シェルスクリプト
~~~~ここから~~~~
#!/usr/bin/sh

FILE_PATH="/xxx/xxx/"         #csvファイルが保存されているパス

scp ユーザ名@ホスト名(or IPadress):$FILE_PATH/xxxxx.csv.`date +%Y%m%d` #ファイル転送

RET_CODE=$?                #scpコマンドの結果をRET_CODEに代入(成功:0、失敗1以上)

if [ ${RET_CODE} -ne 0 ] ; then #成功でなければ
mail -s "メールのタイトル" メールアドレス #メールを送信
fi
~~~~ここまで~~~~

・ホストベース認証、パスフレーズなしの公開鍵認証の設定
ここを参考にすると良いです。
http://www.jp.freebsd.org/QandA/HTML/2255.html


3.補足
scpコマンドには-Pオプションで転送に使うポート番号を指定できます。
デフォルトでは22番ポートとなっていますが、これは一般的に知られているポートですので、サーバへの攻撃に使われる可能性を考えると任意の使っていないポートを使うと(サーバへの)安全性が若干高まります。

また、インターネットを介した通信とのことですので、ネットワーク機器(ファイアーウォール、ルータ、スイッチ)やOSで該当のポート、IPアドレスが許可されていることが必要です。

4.セキュリティ面
基本的な事項として、このシェルスクリプトのwrite権を外しておいて下さい。
また、シェルスクリプトでの考慮は難しいですが、3.補足にあるように、ネットワーク、OSでIPアドレス、ポートを組み合わせて不正な通信自体をブロックすればまず漏れることはありません。
情報漏えいの原因の殆どは、該当ユーザのパスワードを教えてしまった(ばれてしまった)、上での設定を間違え他の人も使えるようになっていた、など人的な要因であり、きちんと設定していれば技術的にハッキングすることはまず無いと考えて良いです。

追記 : 2008年12月19日 17:37

(文字数制限に引っかかった為、追記します)

5.最後に
某企業のサーバインフラを長年担当しておりますが、本件は事前準備が肝になりますので、ネットワーク、サーバインフラ管理者と直接連携することが実現の近道と思われます。

追記 : 2008年12月23日 19:02

実際にテストしているとのことなので、ファイルサイズチェックも入れたものを添付しておきます。
一番上の変数設定の部分を変えれば使えるようにできています。
※windows上で編集した部分もあるため、細かいエラーがあれば微調整ください

添付ファイル オリジナルファイルは関連ユーザーのみ閲覧できます

  • sshcopy.sh
2008-12-19 17:36:36

ランサー情報

nagaguchan (nagaguchan)
個人 その他プログラマ・エンジニア 東京都 実績 2

相手のことを考えて丁寧なメッセージを心がけましょう。 サイト外取引行為 は禁止しております。