ansible.cfg

Ansibleの表題のファイルについて。『初めてのAnsible』を読んで知ったことのメモ。

■ 環境

  • Ansible 2.2.1.0
  • Vagrant 1.9.1
  • Mac OSX El Capitan

■ ansible.cfg

Vagrantで稼働させているホストに対して、Ansibleで構築を行っている。以前は`ansible.cfg`の存在を知らなかったので下記のように手打ちでやっていたりした。

$ ansible-playbook -i hosts test.yml

現在は下記のように`ansible.cfg`を設定している。

[defaults]
inventory = hosts
remote_user = vagrant
private_key_file = ~/.vagrant.d/insecure_private_key
host_key_checking = False
retry_files_enabled = False

またVagrantfileには下記を設定している。

Vagrant.configure("2") do |config|
  :
  config.ssh.insert_key = false
  :
end

これで下記のようにアクセスすることができる。

$ ansible-playbook test.yml

`ansible.cfg`では、”inventory“を指定することによりコマンド実行時の`-i`オプションを省略することができる。『初めてのAnsible』では`hostfile`を使用するように記載されていたが、現在は”deprecated“のようなのでこちらの設定を使用するようにした。。また”remote_user“は”vagrant“ユーザをデフォルトで使うようにし、”private_key_file“は指定したファイルを使うようにしている。最近のVagrantはVM毎に異なる鍵が使われるようになっていたが`Vagrantfile`にて`config.ssh.insert_key`を”false“にすることで、このVagrantfileで起動したVMに関しては共通の鍵が使用されるようになっている。また”host_key_checking“を “False“にすることで、VMを何度再作成してもSSH接続時にエラーが起こらないようにしている。最後に”retry_files_enabled“は”False“にしている。失敗した場合はいつも最初から流すようにしているので、retryファイルはほとんど使用していない。邪魔に感じてしまうので作成されないようにしている。

これで随分と楽になった。知らないことは罪である。いや、公式のドキュメントを読まない事が罪である。

sshpass

Macで表題を入れてしまったメモ。セキュリティ的に良くないってことはわかってる…。

■ 環境

  • sshpass 1.06
  • Mac OSX El Capitan

■ sshpass

SSHでログインをするのに、公開鍵認証ではなくパスワード認証でしか許可されていないサーバが結構な量で存在する。そのログインIDとパスワードはExcelで送られてくる。毎回そのExcelファイルを開いて対象のIP・ログインID・パスワードをコピーしてターミナルに貼り付けて…とやっているのがとてつもなく無駄な時間なので、いけないとは思いつつも`sshpass`で楽をするようにしてしまった。

`sshpass`はHomebrewではデフォルトではインストールできない。検索するだけで下記のようになった。

$ brew search sshpass
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.
$

というわけで、直接インストールを実行する。

$ brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

あとは`.bashrc`に`alias`を設定した。

alias hostXX="sshpass -p 'password' ssh user@XXX.XXX.XXX.XXX"

良くないことだとはわかっているが…これで楽できる。

以上。

ITエンジニアとして生き残るための「対人力」の高め方

■ 感想

本棚にあって昼休みに手に取ってみたところ、わかりやすく書かれていて読みやすかったので読んでみた。

社外編・社内編と各15ケースの具体例が書かれていて、失敗例と成功例が具体的でわかりやすい。読んでいて「あーあるある」というネタが多かった気がする。自身も対人力が高くない。かつ周囲の人も高くはなかったということであろうか。

黙って技術だけをやっているだけでは、これから先もある程度までしかやっていくことはできない。人との繋がりがあると今の仕事が終わってしまっても、次から次へと仕事が来るようになるであろう。

と、わかってはいるものの、やはり人付き合いはあまり好きではない。一緒に仕事をして、自身の技術力や人柄を認めてもらえて、仕事に誘ってもらえるのが自身としては一番である。

久しぶりに読んだ本である。最近まとまった時間が取れないのであまり読んでない。

GeoIP

表題の件について。ふとしたことから`geoiplookup`なるコマンドの存在を知ったので試してみた。

■ 環境

  • GeoIP 1.4.8
  • Amazon Linux

■ GeoIP

AmazonLinuxでパッケージがあるのか確認。

$ sudo yum search geoip
読み込んだプラグイン:priorities, update-motd, upgrade-helper
========== N/S matched: geoip==========
GeoIP-devel.x86_64 : Development headers and libraries for GeoIP
lighttpd-mod_geoip.x86_64 : GeoIP module for lighttpd to use for location lookups
mod24_geoip.x86_64 : GeoIP module for the Apache HTTP Server
mod_geoip.x86_64 : GeoIP module for the Apache HTTP Server
nginx-mod-http-geoip.x86_64 : Nginx HTTP geoip module
GeoIP.i686 : C library for country/city/organization to IP address or hostname mapping
GeoIP.x86_64 : C library for country/city/organization to IP address or hostname mapping

  Name and summary matches only, use "search all" for everything.
$

名前から察するに”GeoIP“であろう。確認する。

$ sudo yum info GeoIP
読み込んだプラグイン:priorities, update-motd, upgrade-helper
利用可能なパッケージ
名前                : GeoIP
アーキテクチャー    : i686
バージョン          : 1.4.8
リリース            : 1.5.amzn1
容量                : 780 k
リポジトリー        : amzn-main/latest
要約                : C library for country/city/organization to IP address or hostname mapping
URL                 : http://www.maxmind.com/app/c
ライセンス          : LGPLv2+
説明                : GeoIP is a C library that enables the user to find the country that any IP
                    : address or hostname originates from. It uses a file based database that is
                    : accurate as of March 2003. This database simply contains IP blocks as keys, and
                    : countries as values. This database should be more complete and accurate than
                    : using reverse DNS lookups.

名前                : GeoIP
アーキテクチャー    : x86_64
バージョン          : 1.4.8
リリース            : 1.5.amzn1
容量                : 783 k
リポジトリー        : amzn-main/latest
要約                : C library for country/city/organization to IP address or hostname mapping
URL                 : http://www.maxmind.com/app/c
ライセンス          : LGPLv2+
説明                : GeoIP is a C library that enables the user to find the country that any IP
                    : address or hostname originates from. It uses a file based database that is
                    : accurate as of March 2003. This database simply contains IP blocks as keys, and
                    : countries as values. This database should be more complete and accurate than
                    : using reverse DNS lookups.

$

インストールする。

$ sudo yum install GeoIP

インストールされたモジュールを確認する。

$ rpm -ql GeoIP
/etc/GeoIP.conf
/etc/GeoIP.conf.default
/usr/bin/geoiplookup
/usr/bin/geoiplookup6
/usr/bin/geoipupdate
/usr/lib64/libGeoIP.so.1
/usr/lib64/libGeoIP.so.1.4.8
/usr/lib64/libGeoIPUpdate.so.0
/usr/lib64/libGeoIPUpdate.so.0.0.0
/usr/share/GeoIP
/usr/share/GeoIP/GeoIP.dat
/usr/share/doc/GeoIP-1.4.8
/usr/share/doc/GeoIP-1.4.8/AUTHORS
/usr/share/doc/GeoIP-1.4.8/COPYING
/usr/share/doc/GeoIP-1.4.8/ChangeLog
/usr/share/doc/GeoIP-1.4.8/INSTALL
/usr/share/doc/GeoIP-1.4.8/LICENSE.txt
/usr/share/doc/GeoIP-1.4.8/README
/usr/share/doc/GeoIP-1.4.8/TODO
/usr/share/doc/GeoIP-1.4.8/fetch-geoipdata-city.pl
/usr/share/doc/GeoIP-1.4.8/fetch-geoipdata.pl
/usr/share/man/man1/geoiplookup.1.gz
/usr/share/man/man1/geoiplookup6.1.gz
/usr/share/man/man1/geoipupdate.1.gz
$

お望みの`geoiplookup`コマンドがインストールされたようである。では早速自身が管理しているとあるサイトで試してみる。

$ geoiplookup www.example.com
GeoIP Country Edition: US, United States
$

ここで”JP“が返ってくると思っていたのだが、想定外の”US“が返ってきた。さてどういう事だろうか?としばし考えると、このドメインに指定しているIPは最近取得したものであった事を思い出した。インストールされている”GeoIP.dat“のデータが古いのであろうと予想し、前述のモジュール一覧にもあった”GeoIP.dat“ファイルを更新する事にした。

GeoLite Legacy Downloadable Databases << Maxmind Developer Site
http://dev.maxmind.com/geoip/legacy/geolite/

上記より”GeoLote Country“の”Binary/gzip“をダウンロードし、前述の場所に展開する。もともとインストールされたものは2012年のものであったようである。

$ pwd
/usr/share/GeoIP
$ sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ gunzip GeoIP.dat.gz
$ ls -l
-rw-rw-r-- 1 root root 1072823 Feb  8 05:22 GeoIP.dat
-rw-r--r-- 1 root root 1183408 Jan 26  2012 GeoIP.dat.old
$

再度`geoiplookup`コマンドを試してみる。

$ geoiplookup www.example.com
GeoIP Country Edition: JP, Japan
$

思い通りの結果が得られたようである。ちなみに”GeoIP.dat“は毎月第一火曜日に更新されるようだ。

さらに`geoiplookup6`というコマンドもあるが、これも前述のページより”GeoIPv6.dat“をダウンロードし配置したところ使用可能となった。

以上。

access_logに”処理に掛かった時間”を記載

表題の通り。レスポンスタイムではない。あくまでApache Httpd内で処理に掛かった時間である。

■ 環境

  • Apache Httpd 2.4.25
  • Amazon Linux

■ httpd.conf

現状(デフォルトまま)の”LogFormat“には処理時間は記載されていない。

mod_log_config – Apache Httpd 2.4
http://httpd.apache.org/docs/2.4/mod/mod_log_config.html#formats

上記のマニュアルを参考すると、下記があるようである。

  • %D: リクエストを処理するのにかかった時間、マイクロ秒単位
  • %T: リクエストを扱うのにかかった時間、秒単位

言葉が微妙に違うが、内容は同じようである。秒も掛かっていないと思われるので、”%D“を使用している”LogFormat“に追記しておいた。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %D" combined

またSSLは以前のエントリの通り、直前に指定された”LogFormat“とのことなので”/etc/httpd/conf.d/ssl.conf“にも同様に記載した。

以上。

■ 関連

nginxで処理時間をログに出力

ssl_access_logのフォーマット変更