2011年2月25日金曜日

スクリプトの実行


CORE SERVERはクライアントのIPアドレスが変わるたびにSSHやFTPでログインする時に許可が必要(下記の画面)になります。ブラウザにアクセスしなくても良いようにスクリプトを作成しました。言語はpython です。OSは Mac OS  X 10.6 です。


1.  設定ファイル(settings.py)を 更新する。

   (1) HOST_URL を設定します。

     HOST_URL = "www.s**.coreserver.jp"

   (2) コントロールパネルにログインするユーザ名とパスワードを設定します。

     USER_INFO = {
       "id": "***",
       "pass": "*******",
     }

2. スクリプトを実行します。

     python host.py -p ssh
     python host.py --protocol ssh

ソースコード



ソースファイルはsettings.py(設定ファイル)、host.py(Mainプログラム)の二ファイルになります。

settings.py
# -*- coding:utf-8 -*-
'''
Created on 2011/02/25

@author: nasu
'''

#クライアントのIPアドレスを取得する為に使用するURL
VALUE_DOMAIN_URL = "http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip"
HOST_URL = "www.s**.coreserver.jp"

USER_INFO = {
  "id": "***",
  "pass": "******",
}

host.py
# -*- coding:utf-8 -*-
'''
Created on 2011/02/25

@author: nasu
'''
import getopt
import copy
import sys
import urllib2,urllib
from settings import HOST_URL,USER_INFO,VALUE_DOMAIN_URL

def usage():
    print("host.py: python host.py [-p|--protocol] protocol\n")
    print(" -h/--help: 使用方法を表示する")
    print(" -p/--protocol: ssh もしくは ftp を指定する");
    """
    使用方法を記述する。
    """
    sys.exit(1) # 使用方法を説明した後はプログラムを終了する。

def client_regist():
    '''
    CORE SERVER に ホスト情報を登録する。
    '''
    try :
        opts, args = getopt.getopt(sys.argv[1:], "hp:", ["help", "protocol="])
        #引数が指定されていない時の処理を書く。
        if not opts:
            raise getopt.GetoptError("引数が指定されていません")
        query = copy.deepcopy(USER_INFO)
        for opt, arg in opts:
            if opt in ("-h", "--help"):
                usage()
            elif opt in ("-p", "--protocol"):
                if arg == 'ssh':
                    #SSH -s --ssh
                    query['ssh2'] = "SSH登録".encode("utf-8")
                elif arg == 'ftp':
                    #FTP -f --ftp
                    query['telnet2'] = "FTP登録".encode("utf-8")
                else:
                    usage()
            else:
                usage()
        
        value_domain_response = urllib2.urlopen(VALUE_DOMAIN_URL)
        query['remote_host'] = value_domain_response.read() #クライアントのIPアドレスを取得
        #使わないけどデバッグ用に変数を定義
        #coreserver へポスト
        coreserver_admin_response = urllib2.urlopen(
                        "https://ss1.coressl.jp/%s/jp/admin.cgi" % (HOST_URL), 
                        urllib.urlencode(query)
                        )
    except (getopt.GetoptError,IOError), error:
        print str(error)
        usage()

if __name__ == '__main__':
    client_regist()