株価取得ツール -Python-

#!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
import numpy as np
import pandas as pd
import pandas.tools.plotting as plotting
import datetime as dt
import argparse

parser = argparse.ArgumentParser(description='This is a program to get stock price.')
parser.add_argument('-d', '--date', help='start date', required=True)
parser.add_argument('-c', '--code', help='stock code', required=True)
parse = parser.parse_args()

def get_quote(code, start=None, end=None, interval='d'):
    base = 'http://info.finance.yahoo.co.jp/history/?code={0}.T&{1}&{2}&tm={3}&p={4}'
    #start, end = web._sanitize_dates(start, end)
    start = pd.to_datetime(start)
    if end == None:
        end = pd.to_datetime(pd.datetime.now())
    else :
        end = pd.to_datetime(end)
    start = 'sy={0}&sm={1}&sd={2}'.format(start.year, start.month, start.day)
    end = 'ey={0}&em={1}&ed={2}'.format(end.year, end.month, end.day)
    p = 1
    results = []

    if interval not in ['d', 'w', 'm', 'v']:
        raise ValueError("Invalid interval: valid values are 'd', 'w', 'm' and 'v'")

    while True:
        url = base.format(code, start, end, interval, p)
        tables = pd.read_html(url, header=0)
        if len(tables) < 2 or len(tables[1]) == 0:
            break
        results.append(tables[1])
        p += 1
    result = pd.concat(results, ignore_index=True)

    result.columns = ['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Close']
    if interval == 'm':
        result['Date'] = pd.to_datetime(result['Date'], format='%Y年%m月')
    else:
        result['Date'] = pd.to_datetime(result['Date'], format='%Y年%m月%d日')
    result = result.set_index('Date')
    result = result.sort_index()
    return result

def main():
    start = parse.date
    code = parse.code
    t = get_quote(code, start=start)
    print(t)

if __name__ == '__main__':
    main()

メール送信ツール -Python-

#!/usr/bin/python
# -*- coding: utf-8 -*-
import smtplib
import os
import argparse
import mimetypes

from email import Encoders
from email.Utils import formatdate
from email.Header import Header
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase  import MIMEBase
from email.MIMEImage import MIMEImage
from email.MIMEAudio import MIMEAudio

parser = argparse.ArgumentParser(description='This is a program to send a mail.')
parser.add_argument('-f', '--from_addr', help='From Address',     required=True)
parser.add_argument('-t', '--to_addr',   help='To Address',       required=True)
parser.add_argument('-s', '--subject',   help='Subject',          required=True)
parser.add_argument('-m', '--mta',       help='SMTP Server',      required=False, default='localhost')
parser.add_argument('-a', '--attach',    help='Attachment Files', required=False, default=[],    action='append')
parser.add_argument('-S', '--spam',      help='Send a SPAM mail', required=False, default=False, action='store_true')
parse = parser.parse_args()

def read_file(f):
    try:
        with open(f, 'r') as fh:
            data = fh.read()
    except:
        print('Error: can not open ' + f)
        exit()
    return data

def set_attach(mp, files):
    for f in files:
        # 添付ファイルデータを読み込む
        data = read_file(f)

        # Content-Typeヘッダに添付ファイルのメディアタイプをセット
        # http://docs.python.jp/2/library/mimetypes.html
        # http://docs.python.jp/2/library/email-examples.html
        ctype, encording = mimetypes.guess_type(f)

        # メディアタイプを判定出来ない場合、以下を設定
        if ctype is None or encording is not None:
            ctype = 'application/octet-stream'

        # タイプとサブタイプ
        mtype, msub = ctype.split('/')
        if mtype == 'text':
             mime = MIMEText(data, _subtype=msub)
        elif mtype == 'image':
             mime = MIMEImage(data, _subtype=msub)
        elif mtype == 'audio':
             mime = MIMEAudio(data, _subtype=msub)
        else:
             mime = MIMEBase(mtype, msub)
             mime.set_payload(data)
             Encoders.encode_base64(mime)

        f = os.path.basename(f)
        mime.add_header('Content-Disposition','attachment', filename=f)
        mp.attach(mime)

    return mp

def create_message(d):
    cs = 'UTF-8'
    body = '''
これはテストメールです。

'''
    if d['spam']:
        body = 'XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X'

    msg = MIMEText(body, 'plain', cs)
    if d['attach']:
        mp = MIMEMultipart()
        mp.attach(msg)
        msg = set_attach(mp, d['attach'])

    msg['Subject'] = Header(d['subject'], cs)
    msg['From'] = d['from']
    msg['To'] = d['to']
    msg['Date'] = formatdate(localtime=True)

    d['msg'] = msg
    return d

def send(d):
    s = smtplib.SMTP(d['mta'])
    s.sendmail(d['from'], [d['to']], d['msg'].as_string())
    s.close()

def get_args():
    d = dict()
    d['from'] = parse.from_addr
    d['to'] = parse.to_addr
    d['subject'] = parse.subject
    d['mta'] = parse.mta
    d['attach'] = parse.attach
    d['spam'] = parse.spam
    return d

def main():
    d = get_args()
    d = create_message(d)
    send(d)

if __name__ == '__main__':
    main() 

webスクライピングツール -Python-

#!/usr/bin/python
# coding: UTF-8
import urllib2
from bs4 import BeautifulSoup

# アクセスするURL
url = "http://www.nikkei.com/markets/kabu/"

# URLにアクセスする htmlが帰ってくる → <html><head><title>経済、株価、ビジネス、政治のニュース:日経電子版</title></head><body....
html = urllib2.urlopen(url)

# htmlをBeautifulSoupで扱う
soup = BeautifulSoup(html, "html.parser")

# span要素全てを摘出する→全てのspan要素が配列に入ってかえされます→[<span class="m-wficon triDown"></span>, <span class="l-h...
span = soup.find_all("span")

# print時のエラーとならないように最初に宣言しておきます。
nikkei_heikin = ""
# for分で全てのspan要素の中からClass="mkc-stock_prices"となっている物を探します
for tag in span:
    # classの設定がされていない要素は、tag.get("class").pop(0)を行うことのできないでエラーとなるため、tryでエラーを回避する
    try:
        # tagの中からclass="n"のnの文字列を摘出します。複数classが設定されている場合があるので
        # get関数では配列で帰ってくる。そのため配列の関数pop(0)により、配列の一番最初を摘出する
        # <span class="hoge" class="foo">  →   ["hoge","foo"]  →   hoge
        string_ = tag.get("class").pop(0)

        # 摘出したclassの文字列にmkc-stock_pricesと設定されているかを調べます
        if string_ in "mkc-stock_prices":
            # mkc-stock_pricesが設定されているのでtagで囲まれた文字列を.stringであぶり出します
            nikkei_heikin = tag.string
            # 摘出が完了したのでfor分を抜けます
            break
    except:
        # パス→何も処理を行わない
        pass

# 摘出した日経平均株価を出力します。
print nikkei_heikin

Postfix -設定ファイル

Postfix 設定パラメータ

#parameter

意味

queue_directory

Postfix トップレベルキューディレクトリの場所。これは chroot されて 走っている Postfix デーモンプロセスのルートディレクトリです。

command_directory

全ての Postfix 管理コマンドの場所。

daemon_directory

Postfix サポートプログラムおよびデーモンプログラムがあるディレクトリ。 これらは人間によって直接呼び出されるべきではありません。ディレクトリは root が所有しなければいけません。

data_directory

Postfix書き込み可能なデータファイル(キャッシュ、乱数)の場所を指定します。 このディレクトリはmail_ownerアカウントが所有している必要があります。

mail_owner

Postfix キューおよびほとんどの Postfix デーモンプロセスを所有する UNIX システムアカウント。他のアカウントとグループを共有せず、システムの 他のファイルやシステムを所有しないユーザアカウント名を指定します。 特に、nobody や daemon を指定しないでください。「専用のユーザIDと グループIDを使ってください。」

unknown_local_recipient_reject_code

受信者アドレスがローカルで、$local_recipient_maps がその受信者に マッチしない検索テーブルのリストを指定していた場合に、Postfix SMTP サーバが応答する数字のコード。ドメインが $mydestination や $proxy_interfaces、$inet_interfaces にマッチする場合に、受信者 アドレスをローカルと見なします。

デフォルトの設定は 550 (メールを拒否します) ですが、最初は 450 を使って local_recipient_maps 設定が問題ないかどうか確認する時間を取ると より安全です。

alias_database

"newaliases" や "sendmail -bi" で更新される、local(8) 配送のエイリアスデータベース。

$alias_maps で指定されるテーブル全てがローカルファイルである必要は ないため、これは別の設定パラメータになっています。

例:
alias_database = hash:/etc/aliases
alias_database = hash:/etc/mail/aliases

debug_peer_level

リモートクライアントまたはサーバが debug_peer_list パラメータの パターンにマッチした場合の、冗長ログレベルの増分。
(デフォルト: 2)

debugger_command

Postfix デーモンプログラムが -D オプション付きで呼ばれたときに 実行される外部コマンド。

処理が進む前にデバッガを装着するために、"command .. & sleep 5" を 使ってください。X ベースのデバッガを使うのであれば、Postfix を 起動する前に XAUTHORITY 環境変数を設定していることを確認してください。

例:
debugger_command =
    PATH=/usr/bin:/usr/X11R6/bin
    xxgdb $daemon_directory/$process_name $process_id & sleep 5

sendmail_path

Postfix sendmail(1) コマンドの場所を指定している Sendmail 互換機能。 このコマンドは Postfix キューにメールを投函するのに使われます。

newaliases_path

Postfix newaliases(1) コマンドの場所を指定している Sendmail 互換機能。 このコマンドは local(8) aliases(5) データベースを再構築するのに 使われます。

mailq_path

Postfix mailq(1) コマンドがインストールされた場所を指定する Sendmail 互換機能。このコマンドは Postfix メールキューをリストアップするのに 使われます。

setgid_group

set-gid Postfix コマンドおよびグループ書き込み可能な Postfix ディレクトリを所有するグループ。このパラメータ値を変更した場合、 "post-install set-permissions" を再び実行する必要があります。
(デフォルト: postdrop)

html_directory

Postfix サブシステムや機能に関する構築方法や設定方法、操作方法が 書かれた Postfix HTML ファイルの場所。

manpage_directory

Postfix マニュアルページがインストールされた場所。

sample_directory

Postfix 設定例ファイルがあるディレクトリ名。
(デフォルト: /etc/postfix)

readme_directory

Postfix サブシステムや機能に関する構築方法や設定方法、操作方法が 書かれた Postfix README ファイルの場所。

myhostname

このメールシステムのインターネットホスト名。デフォルトでは gethostname() から得た完全修飾ドメイン名を使います。$mydomain は 他の多くの設定パラメータのデフォルト値として使われます。

例:
myhostname = host.domain.tld

mydestination

$local_transport メール配送 transport を使って配送されるドメインの リスト。デフォルトではこれは /etc/passwd および /etc/aliases の 全ての受信者を検索する Postfix local(8) 配送エージェントです。 SMTP サーバは受信者アドレスを $local_recipient_maps で確認し、 存在しない受信者を拒否します。ADDRESS_CLASS_README ファイルの ローカルドメインクラスも参照してください。

デフォルトの mydestination 値はローカルマシンの名前だけを指定して います。メールドメインゲートウェイ上では、$mydomain も含む べきでしょう。

$local_transport 配送方法は、メールシステムの user@[the.net.work.address] (IP アドレスは inet_interfaces および proxy_interfaces パラメータで指定されているもの) 宛のメールアドレスでも 選ばれます。

警告:
バーチャルドメインの名前は指定しないでください - これらの ドメインは別の場所で指定されます。詳細情報は VIRTUAL_README を 参照してください。

このマシンがバックアップ MX ホストになっているドメイン名は 指定しないでください。バックアップ MX ホストをセットアップする方法は STANDARD_CONFIGURATION_README を参照してください。

デフォルトでは、Postfix SMTP サーバは local_recipient_maps パラメータにリストアップされていない受信者宛のメールを拒否します。 local_recipient_maps や unknown_local_recipient_reject_code パラメータの記述は postconf(5) マニュアルを参照してください。

ユーザ名、"/file/name" または "type:table" パターンを空白やカンマで 区切ったリストを指定します。リストは左から右へとマッチし、最初に マッチしたところで検索を止めます。リストから name を除外するには、 "!name" を指定します。"/file/name" パターンはその内容で置き換えられます; "type:table" 検索テーブルは name が検索キーにマッチするとマッチします (検索結果は無視されます)。次の行を空白で始めることで長い行を継続します。

例:
mydestination = $myhostname, localhost.$mydomain $mydomain
mydestination = $myhostname, localhost.$mydomain www.$mydomain, ftp.$mydomain
(デフォルト: $myhostname, localhost.$mydomain, localhost)

inet_interfaces

このメールシステムがメールを受け取るネットワークインターフェース アドレス。デフォルトでは、マシン上でアクティブな全てのインターフェースを ソフトウェアは要求します。このパラメータは user@[ip.address] 宛の メールの配送も制御します。

プロキシやアドレス変換を通って転送されてくるネットワークアドレスに ついては、proxy_interfaces パラメータも参照してください。

注意: このパラメータを変更したら Postfix を stop してから start する 必要があります。
(デフォルト: all)

inet_protocols

サポートされている場合はIPv4IPv6を有効にする。
(デフォルト: all)

mydomain

このメールシステムのインターネットドメイン名。デフォルトでは $myhostname から最初の要素を引いたものを使います。$mydomain は 他の多くの設定パラメータのデフォルト値として使われます。

例:
mydomain = domain.tld

mynetworks

"よそ者" よりも多くの権限を持つ "信頼された" SMTP クライアントの リスト。

特に、"信頼された" SMTP クライアントは Postfix を通したメールの 中継が許可されます。postconf(5) マニュアルの smtpd_recipient_restrictions の記述を参照してください。

"信頼された" ネットワークアドレスのリストは手動で指定することも Postfix に指定させること (これがデフォルトです) もできます。 詳細な情報は mynetworks_style パラメータの記述を参照してください。

代わりに mynetworks リストを手動で指定することもできます。その場合、 Postfix は mynetworks_style の設定を無視します。

network/netmask パターンを空白やカンマで区切ったリストを指定します。 netmask にはホストアドレスのネットワーク部分のビット数を指定します。 "/file/name" や "type:table" パターンを指定することもできます。 "/file/name" パターンはその内容で置き換えられます; "type:table" 検索テーブルはテーブルエントリが検索文字列にマッチすると マッチします (検索結果は無視されます)。次の行を空白で始めることで 長い行を継続します。

例:
mynetworks = 168.100.189.0/28, 127.0.0.0/8
mynetworks = $config_directory/mynetworks
mynetworks = hash:/etc/postfix/network_table

alias_maps

local(8) 配送で使われるエイリアスデータベース。文法の詳細は aliases(5) を参照してください。

デフォルトのリストはシステムに依存します。NIS を持つシステムでは、 デフォルトではローカルのエイリアスデータベースを検索し、それから NIS エイリアスデータベースを検索します。

エイリアスデータベースを変更したら、"postalias /etc/aliases" (またはシステムがメールエイリアスファイルを保存している場所) を 走らせるか、単に "newaliases" を走らせて必要な DBM または DB ファイルを作ってください。

例:
alias_maps = hash:/etc/aliases, nis:mail.aliases
alias_maps = hash:/etc/aliases

owner_request_special

アドレスのローカル部分が owner-listname および listname-request と なっているものを特別扱いします: recipient_delimiter が "-" に なっていても、そのようなアドレスを分割しません。この機能は メーリングリストに便利です。
(デフォルト: yes)

message_size_limit

エンベロープ情報を含む、バイト単位のメッセージの最大サイズ。
(デフォルト: 10240000)

mailbox_size_limit

エンベロープ情報を含む、バイト単位のメッセージの最大サイズ。
(デフォルト: 10240000)

smtpd_recipient_restrictions

Postfix SMTP サーバが RCPT TO コマンドの場面で適用するアクセス制限。

デフォルトでは、Postfix SMTP サーバは以下のものを受け取ります:

IP アドレスが $mynetworks にマッチするクライアントからのメール、 または:
送信者指定のルーティング ((user@elsewhere@domain) を含むアドレス宛 以外で $relay_domains にマッチするリモートの配送先へのメール、または:
$inet_interfaces や $proxy_interfaces、$mydestination、 $virtual_alias_domains、$virtual_mailbox_domains にマッチする、 ローカル配送先へのメール。
重要: このパラメータの設定を変更したら、少なくとも以下のどれか 一つの制限を指定しなければいけません。そうしないと、Postfix は メールの受信を拒否してしまいます:

    reject, defer, defer_if_permit, reject_unauth_destination
制限のリストをカンマまたは空白で区切って指定します。次の行を空白で 始めることで長い行を継続します。制限は指定された順に適用されます; 最初にマッチした制限が勝ちます。

以下の制限は RCPT TO コマンドで受け取る受信者アドレスに特有です。

check_recipient_access type:table
指定された access(5) データベースで RCPT TO アドレスやドメイン、 親ドメイン、localpart@ を検索し、対応する action を実行します。
check_recipient_mx_access type:table
指定された access(5) データベースで RCPT TO アドレスの MX ホストを 検索し、対応する action を実行します。注意: 安全上の理由から "OK" という結果は許されません。特定のホストをブラックリストから外すには、 代わりに DUNNO を使ってください。この機能は Postfix 2.1 以降で使えます。
check_recipient_ns_access type:table
指定された access(5) データベースで RCPT TO アドレスの DNS サーバを 検索し、対応する action を実行します。注意: 安全上の理由から "OK" という結果は許されません。特定のホストをブラックリストから外すには、 代わりに DUNNO を使ってください。この機能は Postfix 2.1 以降で使えます。
permit_auth_destination
以下のうち一つを満たした場合に、要求を許可します:
Postfix がメールを転送する場合: 解決された RCPT TO アドレスが $relay_domains またはそのサブドメインにマッチし、送信者指定の ルーティング (user@elsewhere@domain) を含まない場合、
Postfix が最終配送先の場合: 解決された RCPT TO アドレスが $mydestination や $inet_interfaces、$proxy_interfaces、 $virtual_alias_domains、$virtual_mailbox_domains にマッチし、 送信者指定のルーティング (user@elsewhere@domain) を含まない場合。
permit_mx_backup
ローカルメールシステムが RCPT TO アドレスの MX ホストの場合に、 要求を許可します。これはローカルメールシステムが最終配送先の場合も 含みます。しかし SMTP サーバは、送信者指定のルーティング情報 (例: user@elsewhere@domain) 付きのアドレスを持つメールは転送しません。 一次 MX ホストがネットワークブロックのリストにマッチすることを 要求するには、オプションの permit_mx_backup_networks を使ってください。
注意: Postfix バージョン 2.0 より前のバージョンでは、 permit_mx_backup の使用は推奨されません: 一時的に DNS 検索に問題が あった場合にメールを拒否するかもしれません。
reject_non_fqdn_recipient
RCPT TO アドレスが RFC で要求されているような完全修飾ドメイン 形式ではない場合に、要求を拒否します。
non_fqdn_reject_code パラメータには拒否された要求に対する応答コードを指定します (デフォルト: 504)。
reject_rhsbl_recipient rbl_domain=d.d.d.d
RCPT TO ドメインrbl_domain 以下の A レコード "d.d.d.d" でリストアップされている場合に、要求を拒否します (Postfix バージョン 2.1 以降のみ)。"=d.d.d.d" が 指定されていないと、逆にしたクライアントネットワークアドレスが rbl_domain 以下のいずれかの A レコードでリストアップされている 場合に、要求を拒否します。 .br maps_rbl_reject_code パラメータには要求を拒否する際の応答コードを (デフォルト: 554)、default_rbl_reply にはデフォルトのサーバ応答を、 そして rbl_reply_maps パラメータには rbl_domain でインデックス化 されたサーバ応答を持つテーブルを指定します。この機能は Postfix 2.0 以降で使えます。
reject_unauth_destination
以下のどれか一つに当てはまらない場合に、要求を拒否します:
Postfix がメールを転送する場合: 解決された RCPT TO アドレスが $relay_domains またはそのサブドメインにマッチし、送信者指定の ルーティング (user@elsewhere@domain) を含まない場合、
Postfix が最終配送先の場合: 解決された RCPT TO アドレスが $mydestination や $inet_interfaces、$proxy_interfaces、 $virtual_alias_domains、$virtual_mailbox_domains にマッチし、 送信者指定のルーティング (user@elsewhere@domain) を含まない場合。
relay_domains_reject_code パラメータには、拒否された要求に対する 応答コードを指定します (デフォルト: 554)。
reject_unknown_recipient_domain
RCPT TO アドレスに DNS A または MX レコードがなく、Postfix がその 受信者アドレスの最終配送先ではない場合に、要求を拒否します。
unknown_address_reject_code パラメータには、拒否された要求に対する 応答コードを指定します (デフォルト: 450)。一時的な DNS エラーの 場合には、応答は常に 450 です。
reject_unlisted_recipient (Postfix 2.0 の名前: check_recipient_maps)
RCPT TO アドレスがドメインクラスに対する有効な受信者リストにない場合に、 要求を拒否します。詳細は smtpd_reject_unlisted_recipient の記述を 参照してください。この機能は Postfix 2.1 以降で使えます。
reject_unverified_recipient
RCPT TO アドレスがバウンスするとわかっている場合や、受信者アドレスの 配送先に到達できない場合に、要求を拒否します。アドレス検証情報は verify(8) サーバによって管理されます; 詳細は ADDRESS_VERIFICATION_README ファイルを参照してください。
unverified_recipient_reject_code パラメータには、アドレスがバウンスするとわかっている場合の応答を 指定します (デフォルト: 450, 変えても安全だという自信がある場合には 550 に変えてください)。 Postfix は一時的な問題でプローブが失敗した 場合には 450 で応答します。この機能は Postfix 2.1 以降で使えます。
この場面で有効な他の制限:

Generic SMTP コマンドのどの場面でも使える 一般的な制限は smtpd_client_restrictions に記述されています。
SMTP コマンドに特有の制限は smtpd_client_restrictions や smtpd_helo_restrictions、smtpd_sender_restrictions に記述されています。
例:
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
(デフォルト: permit_mynetworks, reject_unauth_destination)

smtpd_recipient_limit

Postfix SMTP サーバがメッセージ配送要求ごとに受け付ける、最大の 受信者数。
(デフォルト: 1000)

fallback_relay

見つからなかったり到達できない SMTP 配送先への、オプションのリレー ホストのリスト。

デフォルトでは、配送先が見つからない場合にはメールは送信者に返され、 配送先に到達できない場合には配送が遅延されます。

fallback relay は SMTP による配送先でなければいけません。ドメイン、 ホスト、host:port、[host]:port、[address] または [address]:port を 指定します; [host] の形式は MX 検索を無効にします。複数の SMTP 配送先を指定すると、Postfix は指定された順でそれらを試します。
(デフォルト: empty)

transport_maps

受信者アドレスから (メッセージ配送 transport、next-hop 配送先) への マッピングを持つ、オプションの検索テーブル。詳細は transport(5) を 参照してください。

ゼロ個以上の "type:table" 検索テーブルを指定してください。この機能を ローカルファイルで使うのであれば、変更後に "postmap /etc/postfix/transport" を実行してください。

例:
transport_maps = dbm:/etc/postfix/transport
transport_maps = hash:/etc/postfix/transport
(デフォルト: empty)

smtp_helo_name

SMTP EHLO または HELO コマンドで送るためのホスト名。

デフォルト値はマシンのホスト名です。ホスト名または [ip.add.re.ss] を 指定します。

全ての SMTP クライアントに対しては main.cf ファイルでこの情報を指定 できますし、もしくは特定のクライアントに対しては master.cf ファイルで 指定できます。例:

  /etc/postfix/master.cf:
        mysmtp ... smtp -o smtp_helo_name=foo.bar.com
(デフォルト: $myhostname)

公開鍵

■公開鍵の作成・設定(説明付ver)  
 ファイルの送信等で、パスワードなしで情報のやり取りをする場合に、
 公開鍵を接続元と接続先のサーバに設定する。
 ※以下<>の中身は、サーバ・プロジェクトにより異なる
 ※[接続元サーバ]と[接続先サーバ]を読み間違えないよう気をつける!
 
【概要】
  [接続元サーバ]で公開鍵(/root/.ssh/id_rsa.pub)を作成し、
  [接続先サーバ]の/home/<接続を許可するユーザ名>/.ssh/authorized_keysに、
  [接続元サーバ]で作成した/root/.ssh/id_rsa.pubの中身を追記する。
 
 1.接続元のサーバで公開鍵を作成する
  [接続元サーバ]
  ①/root/.ssh/配下にid_rsa.pubファイルを作成する。
   # ssh-keygen
  
   ※ コマンド実行後に対話形式で質問が出るが、今回は全てEnterを押下した。
  
  
 2.公開鍵が作成されたことを確認する
  [接続元サーバ]
   # ls -la /root/.ssh/
  
    ※ /root/.ssh/は隠しディレクトリのため、lsのオプションに-aを付ける
  
   # cat /root/.ssh/id_rsa.pub
    例)ssh-rsa AAAA(略) root@<接続元ホスト名>
  
  
 3-1.接続先サーバに公開鍵の記述をコピーする(scp通信できる場合 通信できない場合は3-2へ)
  [接続元サーバ]
   ①失敗してid_rsa.pubが消失するリスクを避けるため、/tmp配下にコピーする
    # cp -p /root/.ssh/id_rsa.pub /tmp
  
   ②[接続先サーバ]に公開鍵をコピーする
    # scp /tmp/id_rsa.pub <接続を許可するユーザ名>@<接続先ホスト名>:〈任意のディレクトリ〉
  
    例)scp /tmp/id_rsa.pub store@server1:/home/store
    ※例では 接続を許可するユーザ名:store
             接続先ホスト名:server1
             任意のディレクトリ:/home/store
      以下、この例のユーザ名・ホスト名を使用して記述する
            
   ③/home/<接続を許可するユーザ名>にコピーされたことを確認する
    # ssh store@rserver1 'ls -la /home/store/'
   
   ④公開鍵設定前に[接続先サーバ]の/home/<接続を許可するユーザ名>/.ssh/authorized_keysの中身をログに残す
    # ssh store@rserver1 'cat /home/store/.ssh/authorized_keys'
   
    ※/home/<接続を許可するユーザ名>/.ssh/authorized_keysが存在しない場合ディレクトリ・ファイルを作成する
   
   ⑤[接続先サーバ]の/home/<接続を許可するユーザ名>/.ssh/authorized_keysに
     [接続元サーバ]の/root/.ssh/id_rsa.pubの中身を追記する
    # ssh store@rserver1 'cat /home/store/id_rsa.pub >> /home/store/.ssh/authorized_keys'
   
    ※リダイレクト「>>」:追記
                  「>」:上書き
       今回は追記なので、「>>」と2個の記号を書くこと!!
      
   ⑥[接続先サーバ]の/home/<接続を許可するユーザ名>/.ssh/authorized_keysの中身を確認
    # ssh store@rserver1 'cat /home/store/.ssh/authorized_keys'
     
   ⑦[接続先サーバ]に最初にコピーした公開鍵を削除する
    # ssh store@rserver1 'rm /home/store/id_rsa.pub'
   
    ※/home/store/:3-1-②の任意のディレクト
   
   ⑧[接続先サーバ]からコピーした公開鍵が削除されたことを確認する
    # ssh store@rserver1 'ls -la /home/store/'
   
 
 3-2.接続先サーバに公開鍵の記述をコピーする(scp通信できない場合)
  [接続元サーバ]
   ①公開鍵の中身をログに残す(2.で実施済み)
    # cat /root/.ssh/id_rsa.pub
   
  [接続先サーバ]
   ②/home/<接続を許可するユーザ名>/.ssh/authorized_keysの中身を確認する
    # cat /home/<接続を許可するユーザ名>/.ssh/authorized_keys
   
    例)cat /home/store/.ssh/authorized_keys
    ※例では 接続を許可するユーザ名:store
      以下、この例のユーザ名を使用して記述する
     
   ③[接続先サーバ]の/home/<接続を許可するユーザ名>/.ssh/authorized_keysに
     [接続元サーバ]の公開鍵の中身を追記
    # vi /home/store/.ssh/authorized_keys
   
    ※3-2-①で残した公開鍵の中身のログをコピペして追記
   
   ④/home/<接続を許可するユーザ名>/.ssh/authorized_keysに公開鍵が追記されたことを確認する
    # cat /home/store/.ssh/authorized_keys
   
   
 4.[接続元サーバ]から[接続先サーバ]にSSH通信をし、パスワードが要求されないことを確認する
  [接続元サーバ]
   # ssh <接続を許可するユーザ名>@<接続先ホスト名>
  
    例)ssh store@server1

Linuxコマンド

<ファイル操作>

  1. awk

  • 文法

 awk (オプション) ファイル名

  • オプション

 -F 文字  区切り文字を指定
 -f     awk処理のパターンを記述したプログラムファイルを指定

  • 実行例

 ▼ 第3フィールドを表示
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 $ cat awk_test.txt
 AAAAAAA BBBBBBB ccccccc EEEEEEE
 $ awk '{print $3}' awk_test.txt
 ccccccc
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 ▼ 小文字の行を検索して表示
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 $ cat awk_test.txt
 AAAAAAA
 BBBBBBB
 ccccccc
 EEEEEEE
 $ awk '/^[a-z]/ {print}' awk_test.txt
 ccccccc
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 ▼ 第3フィールド(数値)が5より大きい行を検索して表示
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
 $ cat awk_test.txt
 AAA BBB 2
 ccc ddd 7
 eee fff 5
 ggg hhh 9
 $ awk '$3 > 5' awk_test.txt
 ccc ddd 7
 ggg hhh 9
 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

***ブログ開設***

目的

仕事で使う情報(キーワード:IT、SE、LinuxPython、、、)を書き留めておくメモ。