Quantcast
Channel: 俺的備忘録 〜なんかいろいろ〜
Viewing all 1028 articles
Browse latest View live

awkでの四則演算や割り算の余り、べき乗を求める方法

$
0
0

awkで四則演算や割り算の余りを求める場合。
これは非常に簡単で、以下のようにすればよいだけだ。

awk '{print x + y}' # 加算
awk '{print x - y}' # 減算
awk '{print x * y}' # 乗算
awk '{print x / y}' # 除算
awk '{print x % y}' # 剰余(割り算の余り)
awk '{print x ^ y}' # べき乗

blacknon@BS-PUB-UBUNTU-01:~$ echo "" | awk '{print 5 + 4}' # 加算
9
blacknon@BS-PUB-UBUNTU-01:~$ echo "" | awk '{print 5 - 4}' # 減算
1
blacknon@BS-PUB-UBUNTU-01:~$ echo "" | awk '{print 5 * 4}' # 乗算
20
blacknon@BS-PUB-UBUNTU-01:~$ echo "" | awk '{print 5 / 4}' # 除算
1.25
blacknon@BS-PUB-UBUNTU-01:~$ echo "" | awk '{print 5 % 4}' # 剰余(割り算の余り)
1
blacknon@BS-PUB-UBUNTU-01:~$ echo "" | awk '{print 5 ^ 4}' # べき乗
625

 


Ubuntu 14.04 LTSを16.04 LTSへアップグレードする

$
0
0

Ubuntu 14.04 LTSから16.04 LTSへアップグレードしたい場合、以下のコマンドを実行してやることでアップグレードさせることができる。
事前にupgradeを実行しておくのを忘れないようにしておこう。

sudo apt-get dist-upgrade
sudo do-release-upgrade -d

コマンド実行時、ssh経由で処理を行っている場合は画面のような警告(TCP1022でもsshのポートを開けるかどうか)が表示されるので、とりあえずyを選択する。

20160720_085310000000

 

後は、状況におうじてYes/Noを聞かれるから、環境に合わせて選択していけばよい。

 

コンソール上で動的に標準出力のあいまい検索・選択を行える『pick』コマンド

$
0
0

調べものをしてたところ、コンソール上でパイプで渡して動的にあいまい検索を行い、その行を選択できる『pick』コマンドというものがあったので、ちょっと入れてみることにした。

1.インストール

以下のコマンドを実行し、『pick』コマンドをインストールする。

●CentOSなどRHEL系

yum install -y ncurses ncurses-devel
wget https://github.com/thoughtbot/pick/releases/download/v1.4.0/pick-1.4.0.tar.gz
tar xzvf pick-*.tar.gz
cd pick-*
./configure
make && sudo make install

 

●Debian/Ubuntu系

sudo apt-get install pick

 

●Mac OS X

brew install pick

 

これでインストールできたはずだ。

2.実際に使ってみる

それでは、実際に使ってみよう。
基本は、以下のようにパイプで渡して利用する。

コマンド | pick
コマンド | pick | pick

 

実際に使ってみた感じは以下(選択カーソルがハイライトされてないけど…)。
動的に選択し、それを後工程のコマンドに渡せるのは結構便利かもしれない。

pick

 

PostgreSQLでDBサーバのバージョンを確認する

$
0
0

動作しているPostgreSQLのバージョンを調べるには、以下の方法がある。

1.コンソール上から確認する

コンソール上からのバージョン確認は、以下のコマンドで行える。

/usr/pgsql-*/bin/pg_config --version
/usr/pgsql-*/bin/postgres -V
-bash-4.2$ /usr/pgsql-*/bin/pg_config --version
PostgreSQL 9.4.8
-bash-4.2$ /usr/pgsql-*/bin/postgres -V
postgres (PostgreSQL) 9.4.8

2.クエリから確認する

以下のクエリを実行してもバージョン確認は行える。

SELECT version();
SHOW server_version;
SHOW server_version_num;
postgres=# SELECT version();
                                                   version
--------------------------------------------------------------------------------------------------------------
 PostgreSQL 9.4.8 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4), 64-bit
(1 行)

postgres=# SHOW server_version;
 server_version
----------------
 9.4.8
(1 行)

postgres=# SHOW server_version_num;
 server_version_num
--------------------
 90408
(1 行)

 

MariaDB Galera Cluster 10.1系でSSLを利用する

$
0
0

MariaDB Galera Clusterで、クライアントとの接続にSSLを利用することができるようなので、設定してみることにした。
調べていると、Galera Clusterのバージョンが10.0系と10.1系で設定方法が違うようだったが、今回は10.1系での設定を行う。

1.鍵ファイルの作成

まずは、Galera Cluster側で以下のコマンドを実行し、公開鍵の作成を行う。

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
[root@BS-PUB-GALERA-01 ~]# openssl genrsa 2048 > ca-key.pem
Generating RSA private key, 2048 bit long modulus
.......................+++
......................................................................................+++
e is 65537 (0x10001)
[root@BS-PUB-GALERA-01 ~]# openssl req -new -x509 -nodes -days 365000 -key ca-key.pem -out ca-cert.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

 

次に、サーバ用・クライアント用それぞれの鍵ファイル、SSL証明書を作成する。

●サーバ用

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
openssl rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
[root@BS-PUB-GALERA-01 ~]# openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem
Generating a 2048 bit RSA private key
........................+++
..................................+++
writing new private key to 'server-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@BS-PUB-GALERA-01 ~]# openssl rsa -in server-key.pem -out server-key.pem
writing RSA key
[root@BS-PUB-GALERA-01 ~]# openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting CA Private Key

 

●クライアント用

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem
openssl rsa -in client-key.pem -out client-key.pem
openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
[root@BS-PUB-GALERA-01 ~]# openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem
Generating a 2048 bit RSA private key
.........+++
................+++
writing new private key to 'client-key.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@BS-PUB-GALERA-01 ~]# openssl rsa -in client-key.pem -out client-key.pem
writing RSA key
[root@BS-PUB-GALERA-01 ~]# openssl x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
Signature ok
subject=/C=XX/L=Default City/O=Default Company Ltd
Getting CA Private Key

 

最後に、以下のコマンドでサーバ・クライアントの鍵が問題ないかを確認する。
※「error 18 at 0 depth lookup:self signed certificate」とエラーが出る場合、CA証明書とサーバ・クライアントの鍵で同じ情報(未記入の場合も含む)が入っているのが原因。ここでは、CA証明書だけ「JP」を入れてる。

openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
[root@BS-PUB-GALERA-01 ~]# openssl verify -CAfile ca-cert.pem server-cert.pem client-cert.pem
server-cert.pem: OK
client-cert.pem: OK

 

2.Galera Cluster & クライアントの設定ファイルを編集

鍵ファイルの作成が終わったら、クラスタを構成している各ノードにサーバ鍵を配布して、設定ファイルを編集する。
今回は、鍵ファイルは「/var/lib/mysql/cert」というディレクトリを作成し、そこに配布することとする。

設定ファイルの記述例は以下。
追記したところをハイライトで表示させている。

●/etc/my.cnf.d/server.cnf

[mysqld]
bind-address=0.0.0.0
plugin-load-add=file_key_management.so
file_key_management
file_key_management_filename = /opt/key.enc
file_key_management_filekey = XXXXXX
file_key_management_encryption_algorithm=AES_CBC
ssl-ca = /var/lib/mysql/cert/ca-cert.pem
ssl-key = /var/lib/mysql/cert/server-key.pem
ssl-cert = /var/lib/mysql/cert/server-cert.pem

[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_provider_options="socket.ssl_key=/var/lib/mysql/cert/server-key.pem;socket.ssl_cert=/var/lib/mysql/cert/server-cert.pem;socket.ssl_ca=/var/lib/mysql/cert/ca-cert.pem"
binlog_format=ROW
wsrep_cluster_address='gcomm://'
wsrep_cluster_name='DBCLUSTER'
wsrep_node_name='DBCLUSTER-NODE1'
wsrep_node_address = XXX.XXX.XXX.XXX
general-log
general-log-file=queries.log
log-output=file

 

設定完了しサービス再起動したら、クライアント側でも鍵ファイルの設定を行う。
mysqlクライアント側の「/etc/my.cnf.d/client.cnf」で「[client]」配下に以下の内容を追記する。


ssl-ca = /PATH/ca-cert.pem
ssl-key = /PATH/client-key.pem
ssl-cert = /PATH/client-cert.pem

3.ユーザにSSLの使用設定

最後に、SSLを使用するユーザの権限設定を行う。
環境・SSL設定したいユーザに合わせ、以下のSQLを実行する。

GRANT ALL PRIVILEGES ON *.* TO ユーザ名@ホスト IDENTIFIED BY 'パスワード' REQUIRE SSL;
FLUSH PRIVILEGES;

 

これで、Galera ClusterでSSL接続ができるようになった。
一応、以下のSQLでSSLが有効になっているかを確認する。

SHOW STATUS LIKE 'Ssl_cipher'
[root@BS-PUB-GFRONT-01 ~]# mysql -u test test -pXXXXXXX -h XXX.XXX.XXX.XXX -e "SHOW STATUS LIKE 'Ssl_cipher'"
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| Ssl_cipher    | DHE-RSA-AES256-GCM-SHA384 |
+---------------+---------------------------+

 

tcpdumpでパケットキャプチャも行ったが、SSL化前は実行したSQL文もその結果も丸見えだったのが、SSL化以後は無事見えない状態になった。

●SQLの実行結果

[root@BS-PUB-GFRONT-01 ~]# mysql -u test test -pXXXXXXXX -h XXX.XXX.XXX.XXX -e "SELECT * FROM test"
+------+--------+
| id   | name   |
+------+--------+
|    1 | test   |
|    2 | test   |
|    3 | test   |
|    4 | test   |
|    5 | second |
|    5 | five   |
|    6 | six    |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
|    5 | five   |
+------+--------+

 

●パケットキャプチャ

[root@BS-PUB-GFRONT-01 ~]# tcpdump port 3306 -X | grep -i five -C 4 #SSL化前
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
        0x0090:  0005 0000 04fe 0000 2200 0700 0005 0131  ........"......1
        0x00a0:  0474 6573 7407 0000 0601 3204 7465 7374  .test.....2.test
        0x00b0:  0700 0007 0133 0474 6573 7407 0000 0801  .....3.test.....
        0x00c0:  3404 7465 7374 0900 0009 0135 0673 6563  4.test.....5.sec
        0x00d0:  6f6e 6407 0000 0a01 3504 6669 7665 0600  ond.....5.five..
        0x00e0:  000b 0136 0373 6978 0700 000c 0135 0466  ...6.six.....5.f
        0x00f0:  6976 6507 0000 0d01 3504 6669 7665 0700  ive.....5.five..
        0x0100:  000e 0135 0466 6976 6507 0000 0f01 3504  ...5.five.....5.
        0x0110:  6669 7665 0700 0010 0135 0466 6976 6507  five.....5.five.
        0x0120:  0000 1101 3504 6669 7665 0700 0012 0135  ....5.five.....5
        0x0130:  0466 6976 6507 0000 1301 3504 6669 7665  .five.....5.five
        0x0140:  0700 0014 0135 0466 6976 6507 0000 1501  .....5.five.....
        0x0150:  3504 6669 7665 0700 0016 0135 0466 6976  5.five.....5.fiv
        0x0160:  6507 0000 1701 3504 6669 7665 0700 0018  e.....5.five....
        0x0170:  0135 0466 6976 6507 0000 1901 3504 6669  .5.five.....5.fi
        0x0180:  7665 0700 001a 0135 0466 6976 6507 0000  ve.....5.five...
        0x0190:  1b01 3504 6669 7665 0700 001c 0135 0466  ..5.five.....5.f
        0x01a0:  6976 6505 0000 1dfe 0000 2200            ive.......".
[root@BS-PUB-GFRONT-01 ~]# tcpdump port 3306 -X | grep -i five -C 4 #SSL化後
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
...該当する値がないため返ってこない...

 

これで、Galera Clusterへの接続でSSLを有効にすることができた。

WebベースのオープンソースIT資産管理ツール『Snipe-IT』

$
0
0

社内のIT資産管理をすることになったので、なんかいいツールないかなと探していたところ、WebUIで使えるオープンソースのIT資産管理ツール『Snipe-IT』なるものがあると知ったので、入れて触ってみることにした。
インストールも簡単に行えそうなので、公式で用意されているこちらのマニュアルを元に進めていく。
なお、OSはCentOS 6およびUbuntu 14以降であればインストーラースクリプトが使えるようなので、CentOS 7を用いる。

1.インストーラーのダウンロード・実行

まずはインストーラーのダウンロード・実行から。
以下のコマンドを実行する。

wget https://raw.githubusercontent.com/snipe/snipe-it/master/install.sh
chmod 744 install.sh
./install.sh

 

インストールスクリプトを実行すると、いくつか質問をされるのでそれに回答していく。
回答後、動作に必要となるパッケージを含め自動的にインストールが進む。

DNSにホスト名などを登録していない場合は、IPアドレスを指定してやることもできる。

 

20160730_121755000000

 

インストーラーのキック後は、中で実行されているmysql_secure_installationがパスワードの設定などについて聞いてくるので、都度入力をしていけばよい。

2.Webブラウザからインストール直後の設定

インストーラーを実行したら、コンソール上に表示されているURLへアクセスする。

20160730_141957000000

20160730_142103000000

20160730_142655000000

20160730_142830000000

 

これで、インストール直後での設定ができた。
あとは、ログイン画面から先ほど作成したID/PWでログインするだけだ。

20160730_142911000000

 

触っている限り、登録した各種IT資産やライセンスは紐づけてやることもできるし、消耗品についても管理できるようだ。
少し触った限りでは実用に耐えれそうな感じ。プロフィール画面から設定をすれば日本語にもできるし、悪くないと思う。

20160730_143128000000

 

うーん…
会社の環境にも導入しようかな、どうしよう。

一応、こちらにデモも用意されているようなので、導入を悩んでる人がいたらこれを触って考えてみるといいだろう。

保有しているドメインを管理できるオープンソースでWebベースのドメイン管理ツール『DomainMOD』

$
0
0

調べものをしていたところ、Webベースのドメイン管理ツール『DomainMOD』というものを見かけたので、少し試してみることにする。
確かに、10個くらいならExcelとかで十分管理できるけど、これが何十個とかになってくるとさすがにつらいかもしれないので、こういったツールは必要なのかも。
デモを触ってみる限り、使い勝手も悪くなさそうだ。

というわけで、インストールして少し触ってみることにする。
なお、OSはCentOS 7を用いている。

1.前提となるパッケージの導入

まずは、以下のコマンドでhttpdやMariaDB、phpといったパッケージを導入しておく。
基本的には、前に記述したこちらの内容をそのまま行ってもらえればよい。念のため、FirewalldとSELinuxを無効にしておくとよいだろう。

yum install -y httpd mariadb-server mariadb mariadb-devel php php-devel php-pdo php-mysql git
systemctl enable httpd
systemctl start httpd
systemctl enable mariadb
systemctl start mariadb

 

これで、とりあえずLAMP環境を構築できた。
DBの設定だけ先に行っておこう。最初に、「mysql_secure_installation」を実行して最低限のセキュリティ設定だけ行っておく。

mysql_secure_installation

 

次に、DBユーザとDomainMOD用のデータベースを作成する。
以下のSQLを実行する。

CREATE DATABASE domainmod;
CREATE USER domainmod@'127.0.0.1' IDENTIFIED BY 'password';
GRANT ALL ON domainmod.* TO domainmod;
[root@BS-PUB-WEBTOOL-TEST01 domainmod]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 5.5.47-MariaDB MariaDB Server

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE domainmod;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER domainmod@'127.0.0.1' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL ON domainmod.* TO domainmod;
Query OK, 0 rows affected (0.00 sec)

2.『DomainMOD』のインストール

まず、以下のコマンドでDomainMODのソースコードをダウンロードしてくる。

git clone git://github.com/domainmod/domainmod.git

 

ダウンロード後、Webサーバのデフォルトの公開ディレクトリである「/var/www/html/」に中身を移動する。

cd domainmod
cp -pr * /var/www/html/

 

次に、設定ファイルを編集し、DBへの接続情報を記述するファイル「_includes/config.inc.php」を編集する。
まず、以下のコマンドでテンプレートファイルからコピーしてくる。

cd /var/www/html
cp _includes/config{.SAMPLE,}.inc.php

 

で、接続環境に関するそれぞれの変数に値を代入してやる。
変数「$web_root」はサブディレクトリがないならそのまま空欄にしてやればよい。

$web_root = '';
$dbhostname = '127.0.0.1';
$dbname = 'DBテーブル名(domainmod)';
$dbusername = 'DBユーザー(domainmod)';
$dbpassword = 'DBパスワード(password)';

 

最後に、初期設定をブラウザから行う。
サーバのIPアドレスに対し、httpで接続をする(http://IPアドレス)。
最初の画面では、管理者用のメールアドレスを入れてそのまま「Install DomainMOD」を押下する。

20160731_145339000000

 

終わったら、以下の画面が表示される。
書いてあるように、デフォルトのID/PWは「admin/admin」なので、それでログインすればよい。

20160731_145524000000

 

3.触ってみる

さて、それでは実際にログインしてみよう。
デフォルトのID/PWでログインすると、まず最初にパスワードの変更を促されるので適当に変更しておこう。

20160731_145932000000

 

あとは、適当にいじってやればよい。
ドメインの更新費用なども設定できるので、管理しているドメイン数が多いなら有用だと思う。

20160731_150201000000

Webの負荷テストツール『siege』コマンド

$
0
0

Webの負荷テストに使えるツールとして有名な『siege』コマンドだが、あまりちゃんと使ったことがなかったので少し触ってみることした。

1.インストール

『siege』コマンドは、以下のコマンドでインストールできる。

●CentOSなどRHEL系

yum --enablerepo=epel install siege

 

●Debian/Ubuntu系

sudo apt-get install siege

 

●Mac OS X

brew install siege

 

2.負荷テストの実施

さて、それでは実際に負荷テストを行ってみよう。
使い方は簡単。『siege』コマンドでの負荷テストは、以下のように行う。

siege http://アドレス

20160801_064111000000

 

以下のようなオプションを組み合わせて実行させることもできる。

  • -v … リクエストの詳細を出力する。
  • -q … リクエストの詳細を出力しない。
  • -c NUM … 並行で処理する数。デフォルトでは10。
  • -r NUM … コマンド実行時に実施されるリクエスト数。デフォルトでは制限なし(Ctrl + Cで停止するまでずっとリクエストを投げ続ける)。
  • -l PATH … ログの出力先を指定。
  • -d NUM … リクエストのインターバル(遅延秒数)。
  • -f PATH … URLの記述されたファイルを指定してリクエストを投げる。

[root@BS-PUB-CENT7-01 ~]# siege --help
SIEGE 4.0.2
Usage: siege [options]
       siege [options] URL
       siege -g URL
Options:
  -V, --version             VERSION, prints the version number.
  -h, --help                HELP, prints this section.
  -C, --config              CONFIGURATION, show the current config.
  -v, --verbose             VERBOSE, prints notification to screen.
  -q, --quiet               QUIET turns verbose off and suppresses output.
  -g, --get                 GET, pull down HTTP headers and display the
                            transaction. Great for application debugging.
  -c, --concurrent=NUM      CONCURRENT users, default is 10
  -r, --reps=NUM            REPS, number of times to run the test.
  -t, --time=NUMm           TIMED testing where "m" is modifier S, M, or H
                            ex: --time=1H, one hour test.
  -d, --delay=NUM           Time DELAY, random delay before each requst
  -b, --benchmark           BENCHMARK: no delays between requests.
  -i, --internet            INTERNET user simulation, hits URLs randomly.
  -f, --file=FILE           FILE, select a specific URLS FILE.
  -R, --rc=FILE             RC, specify an siegerc file
  -l, --log[=FILE]          LOG to FILE. If FILE is not specified, the
                            default is used: PREFIX/var/siege.log
  -m, --mark="text"         MARK, mark the log file with a string.
                            between .001 and NUM. (NOT COUNTED IN STATS)
  -H, --header="text"       Add a header to request (can be many)
  -A, --user-agent="text"   Sets User-Agent in request
  -T, --content-type="text" Sets Content-Type in request

Copyright (C) 2016 by Jeffrey Fulmer, et al.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.

shufコマンドで指定した範囲からランダムにn個の数字を抽出する

$
0
0

ふと、ロト6とかロト7買おうと思ったのだけど、あんまり数字を当てる自信がないのでコマンドでランダムに決めてしまおうと思った。
で、Linuxのコマンドでランダムにn個の数字を得る場合はshufコマンドが便利なので、それで得ることにした。

shuf -i○-● -n NUM | sort -n

 

つまり、ロト6やロト7で記述する数字を出す場合、以下のようにすればよいということだ。

●ロト6

shuf -i1-43 -n 6 | sort -n

 

●ロト7

shuf -i1-37 -n 7 | sort -n

[root@BS-PUB-CENT7-01 ~]# shuf -i1-43 -n 6 | sort -n
12
14
25
30
32
36
[root@BS-PUB-CENT7-01 ~]# shuf -i1-43 -n 6 | sort -n
4
5
6
12
16
37
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# shuf -i1-37 -n 7 | sort -n
6
7
10
17
19
25
31
[root@BS-PUB-CENT7-01 ~]# shuf -i1-37 -n 7 | sort -n
6
11
18
23
26
28
36

 

出力を一行にする場合は、最後にsedを入れてやろう。

shuf -i1-43 -n 6 | sort -n | sed -z 's/\n/,/g;s/,$/\n/g'
shuf -i1-37 -n 7 | sort -n | sed -z 's/\n/,/g;s/,$/\n/g'
[root@BS-PUB-CENT7-01 ~]# shuf -i1-43 -n 6 | sort -n | sed -z 's/\n/,/g;s/,$/\n/g'
4,20,26,34,35,43
[root@BS-PUB-CENT7-01 ~]# shuf -i1-43 -n 6 | sort -n | sed -z 's/\n/,/g;s/,$/\n/g'
10,19,20,25,27,40
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# shuf -i1-37 -n 7 | sort -n | sed -z 's/\n/,/g;s/,$/\n/g'
5,25,26,30,31,33,35
[root@BS-PUB-CENT7-01 ~]# shuf -i1-37 -n 7 | sort -n | sed -z 's/\n/,/g;s/,$/\n/g'
4,5,6,24,25,26,32

awkで指定したキーワードを持ってる列のみ抽出する

$
0
0

awkで指定したキーワードを持ってる列のみを抽出する場合、以下のようにコマンドを実行する。

awk '{for(i=1;i<=NF;i++)if(match($i,"キーワード")) print $i}'

20160804_085235000000

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
aaa="1" bbb="2" ccc="3" ddd="4"
aaa="11" bbb="21" ccc="31" ddd="41"
aaa="12" bbb="22" ccc="32" ddd="42"
aaa="13" bbb="23" ccc="33" ddd="43"
aaa="14" bbb="24" ccc="34" ddd="44"
aaa="15" bbb="25" ccc="35" ddd="45"
aaa="16" bbb="26" ccc="36" ddd="46"
aaa="17" bbb="27" ccc="37" ddd="47"
aaa="18" bbb="28" ccc="38" ddd="48"
[root@BS-PUB-CENT7-01 ~]# awk '{for(i=1;i<=NF;i++)if(match($i,"bbb")) print $i}' /tmp/test.txt
bbb="2"
bbb="21"
bbb="22"
bbb="23"
bbb="24"
bbb="25"
bbb="26"
bbb="27"
bbb="28"

 

指定したいパターンが複数ある場合は、以下のようにコマンドを実行することで(複数行に分かれるけど)抽出することができる。

awk '{for(i=1;i&lt;=NF;i++)if(match($i,"キーワード1|キーワード2")) print $i}'
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
aaa="1" bbb="2" ccc="3" ddd="4"
aaa="11" bbb="21" ccc="31" ddd="41"
aaa="12" bbb="22" ccc="32" ddd="42"
aaa="13" bbb="23" ccc="33" ddd="43"
aaa="14" bbb="24" ccc="34" ddd="44"
aaa="15" bbb="25" ccc="35" ddd="45"
aaa="16" bbb="26" ccc="36" ddd="46"
aaa="17" bbb="27" ccc="37" ddd="47"
aaa="18" bbb="28" ccc="38" ddd="48"
[root@BS-PUB-CENT7-01 ~]# awk '{for(i=1;i<=NF;i++)if(match($i,"bbb|ccc")){print $i}}' /tmp/test.txt
bbb="2"
ccc="3"
bbb="21"
ccc="31"
bbb="22"
ccc="32"
bbb="23"
ccc="33"
bbb="24"
ccc="34"
bbb="25"
ccc="35"
bbb="26"
ccc="36"
bbb="27"
ccc="37"
bbb="28"
ccc="38"

 

もし同じ行の内容は一行で出力したい場合は、ちょっと汚いけど以下のように書くとよいだろう。

awk '{for(i=1;i<=NF;i++)if(match($i,"キーワード1|キーワード2")){k=k" "$i}if(i=NF)print gensub("^ ","",1,k);k=""}'
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
aaa="1" bbb="2" ccc="3" ddd="4"
aaa="11" bbb="21" ccc="31" ddd="41"
aaa="12" bbb="22" ccc="32" bbb="3rqt" ddd="42"
aaa="13" bbb="23" ccc="33" ddd="43"
aaa="14" bbb="24" ccc="34" ddd="44"
aaa="15" bbb="25" ccc="35" ddd="45"
aaa="16" bbb="26" ccc="36" ddd="46"
aaa="17" bbb="27" ccc="37" ddd="47"
aaa="18" bbb="28" ccc="38" ddd="48"
[root@BS-PUB-CENT7-01 ~]# awk '{for(i=1;i<=NF;i++)if(match($i,"bbb|ccc")){k=k" "$i}if(i=NF)print gensub("^ ","",1,k);k=""}' /tmp/test.txt
bbb="2" ccc="3"
bbb="21" ccc="31"
bbb="22" ccc="32" bbb="3rqt"
bbb="23" ccc="33"
bbb="24" ccc="34"
bbb="25" ccc="35"
bbb="26" ccc="36"
bbb="27" ccc="37"
bbb="28" ccc="38"

 

awkで最後の列からn個前の列を抽出する

$
0
0

awkで最後の列からn個前の列を抽出する場合は、以下のようにすればよい。

awk '{print $(NF-n)}'

20160805_082527000000

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
aaa="1" bbb="2" ccc="3" ddd="4"
aaa="11" bbb="21" ccc="31" ddd="41"
aaa="12" bbb="22" ccc="32" bbb="3rqt" ddd="42"
aaa="13" bbb="23" ccc="33" ddd="43"
aaa="14" bbb="24" ccc="34" ddd="44"
aaa="15" bbb="25" ccc="35" ddd="45"
aaa="16" bbb="26" ccc="36" ddd="46"
aaa="17" bbb="27" ccc="37" ddd="47"
aaa="18" bbb="28" ccc="38" ddd="48"
[root@BS-PUB-CENT7-01 ~]# awk '{print $(NF-1)}' /tmp/test.txt
ccc="3"
ccc="31"
bbb="3rqt"
ccc="33"
ccc="34"
ccc="35"
ccc="36"
ccc="37"
ccc="38"
[root@BS-PUB-CENT7-01 ~]# awk '{print $(NF-2)}' /tmp/test.txt
bbb="2"
bbb="21"
ccc="32"
bbb="23"
bbb="24"
bbb="25"
bbb="26"
bbb="27"
bbb="28"

 

awkで組み込み関数のgensubを使って指定した列や変数の値だけを置換する

$
0
0

awkで置換するといえば組み込み関数のsub関数やgsub関数だが、これらはawk内で代入した変数の置換をするような使い方ができない($0で受けた内容すべてに対しての置換はできる)。
定義した変数や特定の列に対してのみ置換をする場合は、gensub関数を利用するとよいだろう。

gensub("置換前","置換後",置換位置(NUM)[,置換対象文字列(列や変数名など)])

実際に利用する場合については、以下の例を参考にするとよいだろう。

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test.txt
aaa="1" bbb="2" ccc="3" ddd="4"
aaa="11" bbb="21" ccc="31" ddd="41"
aaa="12" bbb="22" ccc="32" bbb="3rqt" ddd="42"
aaa="13" bbb="23" ccc="33" ddd="43"
aaa="14" bbb="24" ccc="34" ddd="44"
aaa="15" bbb="25" ccc="35" ddd="45"
aaa="16" bbb="26" ccc="36" ddd="46"
aaa="17" bbb="27" ccc="37" ddd="47"
aaa="18" bbb="28" ccc="38" ddd="48"
[root@BS-PUB-CENT7-01 ~]# # 列を指定せずにaaaをhhhに置換する
[root@BS-PUB-CENT7-01 ~]# awk '{print gensub("aaa","hhh",1)}' /tmp/test.txt
hhh="1" bbb="2" ccc="3" ddd="4"
hhh="11" bbb="21" ccc="31" ddd="41"
hhh="12" bbb="22" ccc="32" bbb="3rqt" ddd="42"
hhh="13" bbb="23" ccc="33" ddd="43"
hhh="14" bbb="24" ccc="34" ddd="44"
hhh="15" bbb="25" ccc="35" ddd="45"
hhh="16" bbb="26" ccc="36" ddd="46"
hhh="17" bbb="27" ccc="37" ddd="47"
hhh="18" bbb="28" ccc="38" ddd="48"
[root@BS-PUB-CENT7-01 ~]# # 列を指定(1列目)してaaaをhhhに置換する
[root@BS-PUB-CENT7-01 ~]# awk '{print gensub("aaa","hhh",1,$1)}' /tmp/test.txt
hhh="1"
hhh="11"
hhh="12"
hhh="13"
hhh="14"
hhh="15"
hhh="16"
hhh="17"
hhh="18"
[root@BS-PUB-CENT7-01 ~]# # 1つ目にヒットしたaをhに置換する
[root@BS-PUB-CENT7-01 ~]# awk '{print gensub("a","h",1,$1)}' /tmp/test.txt
haa="1"
haa="11"
haa="12"
haa="13"
haa="14"
haa="15"
haa="16"
haa="17"
haa="18"
[root@BS-PUB-CENT7-01 ~]# # 2つ目にヒットしたaをhに置換する
[root@BS-PUB-CENT7-01 ~]# awk '{print gensub("a","h",2,$1)}' /tmp/test.txt
aha="1"
aha="11"
aha="12"
aha="13"
aha="14"
aha="15"
aha="16"
aha="17"
aha="18"

『vlock』でLinuxの仮想コンソールを一時的にロックする

$
0
0

仕事でLinuxにsshや仮想コンソールでつなげていると、一時的に席を外す際にコンソールをロックしたい時がある。
そんなときは、screenやtmuxを使うのもいいけど、昔からあるという「vlock」コマンドで単にロックするという方法もある。

基本的には最初からインストールされていると思うけど、入ってない場合は以下のコマンドでインストールできる。

yum install vlock
sudo apt-get install vlock

インストール後、普通にオプションなしでコマンドを実行することで、そのコンソールがロックされる。
デフォルトでは、そのユーザのパスワードを入力することでロックを解除することができる。

20160808_073749000000

 

そのほか、以下のようにオプションを組み合わせて利用することも可能だ。
(CentOS 7での確認)

  • -c … カレントの仮想コンソールのみロックする(デフォルトの動作。sshでも利用可能)
  • -a … すべての仮想コンソールをロックする(sshでは利用不可)

 

今時、あまりサーバルームで直接モニタつなげて操作するということもないと思うけど、もしかしたら役に立つときがくる…のかなぁ…。
内部のネットワークにつなげてない仮想マシンを、ProxmoxやESXiの仮想コンソールで操作するときとか…?

awkのフラグを使って特定の文字列~文字列の行を抽出する

$
0
0

特定の文字列を含む行~行を抽出する場合、こちらのやり方を応用してsedで抽出を行う場合が多いと思うが、awkでもフラグを立てることで同じようなことが可能だ。

例)sedでの特定の文字列~文字列の行を抽出する

sed -n '/キーワード/,/キーワード/p'

20160809_055928000000

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test2.txt
aaaaa
bbbbb
ccccc
ddddd
eeeee
fffff
ggggg
hhhhh
iiiii
jjjjj
[root@BS-PUB-CENT7-01 ~]# sed -n '/c/,/g/p' /tmp/test2.txt
ccccc
ddddd
eeeee
fffff
ggggg

awkでやる場合は、以下のようにコマンドを実行してやればよい。

awk '/キーワード/ {flag=1} /キーワード/ {flag=0} flag' # 最後の行を含めない場合
awk '/キーワード/ {flag=1} /キーワード/ {flag=0;print} flag' # 最後の行を含める場合

20160809_063231000000

[root@BS-PUB-CENT7-01 ~]# cat /tmp/test3.txt
1,aaaaa,x
2,bbbbb,y
3,ccccc,z
4,ddddd,y
5,eeeee,y
6,fffff,x
7,ggggg,z
8,hhhhh,x
9,iiiii,x
10,jjjjj,z
[root@BS-PUB-CENT7-01 ~]# awk '/bbbbb/ {flag=1} /fffff/ {flag=0} flag' /tmp/test3.txt # 最後の行を含めない場合
2,bbbbb,y
3,ccccc,z
4,ddddd,y
5,eeeee,y
[root@BS-PUB-CENT7-01 ~]# awk '/bbbbb/ {flag=1} /fffff/ {flag=0;print} flag' /tmp/test3.txt # 最後の行を含める場合
2,bbbbb,y
3,ccccc,z
4,ddddd,y
5,eeeee,y
6,fffff,x

 

AWK実践入門 AWK実践入門

grepで正規表現を用いてIPアドレス・MACアドレスを抽出する

$
0
0

ネットワーク回りのログや調査をしていると、IPアドレスやMACアドレスだけをgrepで抽出したいことがある。
その場合は、それぞれ以下のようにgrepを実行するとよい。

IPアドレス

grep -E '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}'

20160811_093250000000

[ssh-user@BS-PUB-CENT7-01 .ssh]$ echo IPAddress:255.255.333.111 | grep -E '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}'
[ssh-user@BS-PUB-CENT7-01 .ssh]$ echo IPAddress:192.168.0.1 | grep -E '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}'
IPAddress:192.168.0.1
[ssh-user@BS-PUB-CENT7-01 .ssh]$ echo IPAddress:192.168.100.243 | grep -E '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}'
IPAddress:192.168.100.243
[ssh-user@BS-PUB-CENT7-01 .ssh]$ ip addr | grep -E '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}'
    inet 127.0.0.1/8 scope host lo
    inet 172.XXX.XXX.XXX/24 brd 172.XXX.XXX.255 scope global eth0
    inet 172.XXX.XXX.XXX/24 brd 172.XXX.XXX.255 scope global eth1

MACアドレス

grep -i '[0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}'

20160811_094226000000

blacknon@BS-PUB-UBUNTU-01:~$ ifconfig | grep -i '[0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}'
eth0      Link encap:イーサネット  ハードウェアアドレス 62:35:64:64:61:31
eth1      Link encap:イーサネット  ハードウェアアドレス 32:63:31:63:38:61
blacknon@BS-PUB-UBUNTU-01:~$ ip addr | grep -i '[0-9A-F]\{2\}\(:[0-9A-F]\{2\}\)\{5\}'
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    link/ether 62:35:64:64:61:31 brd ff:ff:ff:ff:ff:ff
    link/ether 32:63:31:63:38:61 brd ff:ff:ff:ff:ff:ff
Shell Programming in Unix, Linux and OS X: The Fourth Edition of Unix Shell Programming (4th Edition) (Developer's Library) Shell Programming in Unix, Linux and OS X: The Fourth Edition of Unix Shell Programming (4th Edition) (Developer's Library)

公開鍵に特定のコマンド(sshとかscp)を指定してssh接続時にそのコマンドしか実行できないようにする

$
0
0

sshの踏み台サーバの構築で、ユーザにログイン先の公開鍵が見れないようにしたい。
ということは、踏み台サーバへのssh接続時にcatとかその辺がつかえないようにして、sshコマンドだけを利用可能にすればいいのだけど、そんなやり方あるのかなぁ…と思って調べてみたところ、サーバ側の鍵ファイルに使えるコマンドを設定してやることで実現できそうだ。今回は、sshの踏み台サーバとしてCentOS 7を利用する。

1.鍵ファイルの作成

まずは踏み台サーバへログインするための鍵ファイル作成から。
以下のコマンドを実行する。

ssh-keygen
[ssh-user@BS-PUB-CENT7-01 ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ssh-user/.ssh/id_rsa):
Created directory '/home/ssh-user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ssh-user/.ssh/id_rsa.
Your public key has been saved in /home/ssh-user/.ssh/id_rsa.pub.
The key fingerprint is:
8e:3d:bd:e9:e0:f9:53:7b:f6:18:f2:fb:d9:de:b4:77 ssh-user@BS-PUB-CENT7-01.blacknon.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|        S        |
|       + .  .    |
|      . = ..... .|
|       . +.o.oo+E|
|        oo=. o+BO|
+-----------------+

 

出来上がった鍵ファイルをクライアント・サーバに配置しておく。

2.サーバ側の設定

次に、sshサーバ側(公開鍵認証でログインされる側)の設定を行う。
まず、「authorized_keys」の作成を行う。

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

 

次に、「authorized_keys」で今回追記した鍵ファイルの行の先頭に、以下の内容を追記する。
(先頭から,まで)

command="コマンドのPATH(+引数の内容)", ssh-rsa ...

 

20160811_103133000000

command="/bin/ssh blacknon@172.20.XXX.XXX",no-port-forwarding,no-x11-forwarding,no-agent-forwarding ssh-rsa AA...

 

これで、sshへの接続と同時に指定したコマンドが実行されるようになった。

3.接続

あとは、対象のサーバにssh接続するだけで、指定されたコマンドが接続と同時に実行される。

ssh -i 鍵ファイル ユーザ@ホスト

 

なお、今回の場合は特定のサーバへの踏み台サーバとして作成したのだが、引数でどのサーバへの踏み台として動作させるか指定させたいこともあるだろう。
そんなときは、「$SSH_ORIGINAL_COMMAND」でsshコマンド実行時に引数を渡してやればよい…と思ったのだが、どうもそのやり方だとプロンプトが表示されないようだ。

もし複数サーバへの踏み台として構築して、どのサーバにログインするのかを選択したいのであれば、以前書いたこちらのようなスクリプトをcommandに指定してやるとよいだろう。

20160811_112127000000

 

Ubuntu 14.04 LTSでpamモジュールのOTPWを用いてsshでのワンタイムパスワード(暗証カード?方式)の設定

$
0
0

「OTPW」というpamモジュールを利用して、銀行のパスワードカード(三井住友銀行のちょっと前の認証形式みたいなやつ)に似た認証形式を利用できるようなので、Ubuntu 14.04 LTSで設定してみることにした。

1.インストール・設定

まずはOTPWのインストールおよびsshdへの設定追加を行う。
以下のコマンドを実行し、OTPWをインストールする。

sudo apt-get install otpw-bin libpam-otpw

 

インストール完了後、「/etc/pam.d/sshd」の以下の項目について編集する。

●/etc/pam.d/sshd

#@include common-auth # コメントアウト
auth       required     pam_otpw.so # 追記
session    optional     pam_otpw.so # 追記

 

次に、sshdの設定ファイルである「/etc/ssh/sshd_config」について、以下の項目・内容について編集をする。

●/etc/ssh/sshd_config

UsePAM yes
UsePrivilegeSeparation yes
ChallengeResponseAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

 

最後に、sshdの再起動を行い変更を適用する。

sudo service ssh restart

 

2.パスワード表の生成

sshの設定が終わったら、以下のコマンドを実行してパスワード表を作成する。
このとき、パスワードの照合を行うファイル(~/.otpw)を暗号化するパスワードの入力を求められるので入力する。
※このパスワードはログインの際にも利用するので覚えておくこと。ここでは”test“というパスワードを指定したものとする。

otpw-gen
blacknon@BS-PUB-UBUNTU-01:~$ otpw-gen
Generating random seed ...

If your paper password list is stolen, the thief should not gain
access to your account with this information alone. Therefore, you
need to memorize and enter below a prefix password. You will have to
enter that each time directly before entering the one-time password
(on the same line).

When you log in, a 3-digit password number will be displayed.  It
identifies the one-time password on your list that you have to append
to the prefix password. If another login to your account is in progress
at the same time, several password numbers may be shown and all
corresponding passwords have to be appended after the prefix
password. Best generate a new password list when you have used up half
of the old one.

Enter new prefix password:
Reenter prefix password:

Creating '~/.otpw'.
Generating new one-time passwords ...

OTPW list generated 2016-06-25 16:03 on BS-PUB-UBUNTU-01

000 %%7i VIoI  056 uK=9 Qw:n  112 2V/= 7%oD  168 amic +XuO  224 9RHg P/E7
001 O4H/ BNQa  057 S4=9 mI8p  113 7gwd AdoU  169 /=kL +s94  225 ACpd =ouu
002 Sx5W KoXb  058 Lcdo Vs8U  114 qyCn dbqm  170 QO:P 6OOi  226 co:C dnRz
003 R6aG vjQ/  059 qTPM GMrG  115 WFzH :gWX  171 csxO pddy  227 8Xpg efP8
004 dW%F ikTh  060 XPoE 3VT/  116 fyaG ndA7  172 mMET JUb+  228 =Ldo msh+
005 gSVG zFCT  061 GTUK jVoC  117 3CG5 RCep  173 RrnQ :ddy  229 EA2Q RRtb
006 qVyN %vRN  062 SDyD g:IK  118 YO:i QiWm  174 2Tza A:cE  230 xNc= 7sf2
007 HVjt Gg4i  063 :BNU nwQH  119 :vpZ Le28  175 =iv4 +RN6  231 FBLH YGha
008 LSj2 jPPX  064 7T4e m5yA  120 r7z4 pNQ6  176 pGag :NYj  232 d9o3 T6=S
009 Zezo rdAJ  065 MJLz 4/:p  121 M/j% t=Wb  177 BV=Z WfWS  233 7CwZ tgcc
010 3XaD LeC5  066 ky9R YtMo  122 nji% WEML  178 cbcI 29Hk  234 7Xc/ To2c
011 4:qv y3rp  067 cBIq Rq+o  123 QYYi zbdg  179 Ty8r 4gEX  235 :9wX EK+d
012 bjjz WzB+  068 MQza sLvB  124 d%Xe u:Jy  180 iBzK F=Ey  236 nCC+ bhnS
013 Wa88 4V:d  069 PcSf Pt3G  125 r7vG qBKG  181 NPP9 TMC4  237 t/oi yAK9
014 HbkY V76I  070 kKBF bCz%  126 g%aN TEqH  182 jx%P PsNR  238 :Q9r z+RS
015 8=dS u5QH  071 26Sa ZBXv  127 v5y5 DSzv  183 bFug +6JF  239 4:/6 T6D4
016 bWDu ZZYk  072 BB/P EOwy  128 xLZn uvpa  184 qk%R wXMf  240 huxJ JAkd
017 UuNy Phxh  073 5Qw= :yxX  129 VDsX e=Dp  185 DxvW u9Xa  241 rIm9 z3mZ
018 Gpt9 iLpp  074 nUyi AFrQ  130 YvD/ tHN/  186 :9w2 SrJN  242 bxB4 TEBJ
019 :3uQ yLIB  075 HFVG PLLL  131 aZ9q FELd  187 T5hf DBAq  243 teoc cOXx
020 HN7m bbFo  076 BJqj rH%Y  132 wSsn JQnx  188 q:vG uhtf  244 xXij TWFh
021 YqW5 WQE4  077 IZ:s GcmD  133 R4Y4 IroK  189 %8yC %2wQ  245 YA5H NkoX
022 MdeW 8GzI  078 Pt7A y5xz  134 3EFI /ZKE  190 AGH6 CCmG  246 +4fy WLRz
023 ubg9 M%eS  079 VXdD benc  135 i/u5 SZNy  191 GbQd 5uxu  247 d5fG ym++
024 K8Em bTpu  080 UI8g %p8u  136 URPS JQgp  192 SrZV Y4qt  248 rdWY Zg4n
025 LL/H b3TO  081 F=E/ mhNj  137 8Y5J L+dq  193 FPXN 9Fwu  249 yZmG boug
026 Y:gF JAyT  082 s/RN BFkH  138 jFoN arTo  194 pY7w HOr8  250 EuVb RWr:
027 hPHA :8xi  083 LprC crzU  139 3nV6 =irV  195 AhWe v6SP  251 r4bK V9wG
028 h3/C pscI  084 YKbE B+8Q  140 a2kE 6Ab3  196 kRss rVcE  252 KmxF Bzbv
029 rSNZ SDPP  085 fDJI drZ3  141 EIfV iBVM  197 iCTW yXd/  253 MRBm UTp=
030 NxvY cxLV  086 L5s: q=So  142 rxa: CaDI  198 XW7x muuY  254 I93H cL4V
031 JQtc %bk3  087 FFJ3 7Mq%  143 +7Jw vQuS  199 xJI= r2WT  255 ZD/C g:xH
032 Y9DP nfda  088 :exB Kfin  144 37jO g4nP  200 NdvW 3NQW  256 5MzY DYF=
033 yDqD KUMM  089 sFjC g6Zq  145 ekfG bKOI  201 ib5M w5fk  257 mQni mI:F
034 3S7r mp6I  090 qo%h 77H2  146 L%EA 2=4h  202 3dxi I94=  258 i7Pg =:IJ
035 WzVs z36j  091 83RI :fLy  147 pv9c QBi%  203 tKKw /go+  259 XKCp Ys=d
036 K7A3 kVAM  092 yGdj gw8G  148 gD+T =ymQ  204 nHxC CKGh  260 Uzqn UjrX
037 Q2O6 2O97  093 LcjZ PT5u  149 9CVX UFAy  205 =Qwf aYfR  261 WZBs zEy3
038 bFVf Qfwx  094 t5i2 bsQ9  150 MeHq =dSY  206 jh/M q5xA  262 j=zY M9JG
039 %x8e XpSG  095 jAX7 8AwW  151 CUhM Ftaj  207 bmQn =UCY  263 5Fsh Au3a
040 WX%T 6cAu  096 %8JB U5WA  152 Oawb e=nC  208 7WG3 ASH6  264 n79W EDgW
041 nFVN 83uv  097 UYth Co6A  153 9PgG rUKq  209 xjE2 96:m  265 g:Mm zb7G
042 ZyJn eFTP  098 Vt44 mpp3  154 dnzb Y3nt  210 eSoY yF8u  266 54Me :yVK
043 WSd3 y7ND  099 sZMJ ReIv  155 dP9d cYzt  211 zLCS ds8B  267 qW=7 5s7I
044 8S=: +Vsx  100 zPi4 co9r  156 VMZN pwnU  212 79vJ 9jJP  268 c2k/ z=ev
045 :vXx orM2  101 7R+V /CvX  157 HsHh kvhs  213 SMwH Ui5h  269 j8X/ 6ind
046 ueww Mbu7  102 vusO LCut  158 TBBs IRy5  214 kJuQ oNsY  270 WoB7 D+Ou
047 FKU= X%s:  103 SauT aY9W  159 rQCA fiFp  215 Grx% ZSM7  271 T4y2 6SfJ
048 Yp8Y U%Yr  104 4Xeb 62Q/  160 2:Q/ ZsJC  216 pfDE DIck  272 ZUfL XHe/
049 cEPs hEdc  105 :Hdc %imD  161 +YSy nrx8  217 PFxT v%/D  273 hIKK %ApN
050 qcC= 8idV  106 N=AT Txp2  162 SYsx Iygm  218 T/mn qMfh  274 BzKz hyIG
051 GHn2 9Anf  107 :XsB IcIw  163 Y+x: bxJS  219 j6+X fNtc  275 ZLp2 m%Tt
052 HaQP E:oQ  108 nVGK +BgG  164 RHXB FktC  220 b2Yv T/5q  276 YjBp oTOG
053 LFSC SPHe  109 XZWC oSCp  165 eWiN 8+97  221 6q%z gUO6  277 fg+F Bz9k
054 BMBI t3kA  110 ik/a 6LfZ  166 sf:j AWXI  222 kSMw issU  278 :R%n UXf+
055 IjMa Fci2  111 527U 6TYH  167 436T V/+e  223 8898 DuoX  279 %Gz+ QbWA

            !!! REMEMBER: Enter the PREFIX PASSWORD first !!!

 

どこかのテキストファイルに書き出して持ってるとよいだろう。
(表のパスワードは後から同じコマンドで変更できる。)

3.sshでログインする

さて、それでは実際にログインしてみよう。
sshコマンドを利用してログインすると、以下のようにパスワード入力を促される。

[root@BS-PUB-CENT7-02 ~]# ssh blacknon@172.20.100.120
Password 150:

 

この場合は、暗号化パスワードと作成されたパスワード表の150番を組み合わせて入力してやればよい。
つまり、上の表を例にすると以下のように入力する。(暗号化パスワードとパスワード表のキーワードの間にはスペースが入らない点に注意)

testMeHq =dSY

 

これでログインできるようになる。

[root@BS-PUB-CENT7-02 ~]# ssh blacknon@172.20.XXX.XXX
Password 050:
Welcome to Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Sat Jun 25 16:43:15 JST 2016

  System load:  0.0               Processes:           101
  Usage of /:   4.4% of 37.04GB   Users logged in:     1
  Memory usage: 4%                IP address for eth0: 172.28.0.XXX
  Swap usage:   0%                IP address for eth1: 172.20.100.XXX

  Graph this data and manage this system at:
    https://landscape.canonical.com/

182 packages can be updated.
99 updates are security updates.

New release '16.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Sat Jun 25 16:43:17 2016 from 172.20.100.XXX
blacknon@BS-PUB-UBUNTU-01:~$

 

なお、何度も間違えると「~/.otpw.lock」というファイルが作成され、求められる入力パスワードの数が3個になる場合がある。
この場合は、「暗号化パスワード+パスワード表のキーワード1+パスワード表のキーワード2+パスワード表のキーワード3」というように組み合わせて入力する必要があるようだ。もしくは、「~/.otpw.lock」というファイルを削除してやることでこの状態は解除できる。

『addrwatch』でLAN内のIPアドレス・MACアドレスを監視する

$
0
0

調べもの中、「arpwatch」と似たような使い方ができるツール「addrwatch」というものを見かけたので、Ubuntu 14.04 LTSへインストールしてみることにした。

1.インストール

まずは、インストール前に前提となるパッケージ類をインストールしておく。

sdudo apt-get install autoconf pkg-config libpcap-dev libevent-dev libsqlite3-dev sqlite3

 

次に、Githubからソースをダウンロードしてコンパイルを行う。

git clone https://github.com/fln/addrwatch
cd addrwatch
./bootstrap.sh
./configure --enable-sqlite3
make
sudo make install

 

これでインストールが完了した。

2.動作させる

次に、「addrwatch」を実際に動作させてみる。
デーモンとして動作させない、ログなどに書き出さない場合は、以下のようにroot権限で実行すればよいだろう。
IPアドレス、MACアドレスを検知したら”ARP_REP”として出力される。

sudo addrwatch

20160814_131535000000

 

デーモンとして動作させる場合は「-d」、ログを別の場所に書き出させるならば「-o」で指定できる。
そのほかにもいろいろと動作を指定できるようだ。

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

VyOS(Vyatta)でクラスタ設定を行う

$
0
0

基本的にVyOS(Vyatta)を利用する場合は仮想基盤(ESXiとかKVM)上で動作させることが多いため、可用性とかはそちらに依存(HA化しときゃいいとか、とりあえずVMのバックアップをストレージに置いとけばいいとか、ハードウェアに依存しないからコンフィグさえあればどうとでもなるとか…)させることができるのだけど、時には仮想基盤に乗せず動かすこともあるだろう。また、ダウンタイムがあまり許容されないシステムの場合もある。

そんな時は予備機器を用意しておくのもいいが、VyOSではアクティブ・スタンバイ構成のクラスタを組んでダウンタイムを最小限に抑えることもできるようだ。
なお、クラスタ構成とするにあたって、各VyOSに割り振ったIPアドレス以外に、クラスタ用に利用するIPアドレスが必要。

今回はVyOS2台(プライマリ:BS-PUB-VYOS01、セカンダリ:BS-PUB-VYOS02)で実際にクラスタを組んでみることにする。なお、すでにホスト名やIPアドレスについては設定済みとし、今回はそのあたりの設定には触れないものとする。
VyOSでのクラスタ構成は簡単で、以下のようなコマンドをクラスタ構成ノードで実行してやればよい。

configure
set cluster interface eth0 # クラスタで冗長化するインターフェイス
set cluster keepalive-interval 200
set cluster dead-interval 1000
set cluster pre-shared-secret P@ssw0rd # クラスタ用の任意のパスワード
set cluster group VyOS-Cluster
set cluster group VyOS-Cluster auto-failback true
set cluster group VyOS-Cluster primary BS-PUB-VYOS01 # プライマリノード
set cluster group VyOS-Cluster secondary BS-PUB-VYOS02 # セカンダリノード
set cluster group VyOS-Cluster service XXX.XXX.XXX.XXX/24/eth0 # クラスタ用のIPアドレス

 

あとはcommitすればクラスタ化は完了。
とても簡単に設定できる。

クラスタの状態を確認する場合は、以下のコマンドで実行できる。

show cluster status
vyos@BS-PUB-VYOS02:~$ show cluster status
=== Status report on secondary node BS-PUB-VYOS02 ===

  Primary BS-PUB-VYOS01: Active

  Secondary BS-PUB-VYOS02 (this node): Active (standby)

  Resources [172.XXX.XXX.XXX/24/eth0]:
    Active on primary BS-PUB-VYOS01
オープンソース・ソフトウェアルータVyatta入門 ――実践ルーティングから仮想化まで (Software Design plus) オープンソース・ソフトウェアルータVyatta入門 ――実践ルーティングから仮想化まで (Software Design plus)

pfSenseでウィルススキャン透過プロキシ(Squid+ClamAV)を設定する

$
0
0

職場でFortiGateのウィルスチェックWebフィルタリング機能を使っているのだけど、さすがにこれを家で使うのは難しい(有償のライセンス買わないといけないので…)。
で、何か似たようなものがオープンソースでないかな、と思って調べていたところ、ちょうど使用しているpfSenseでSquid+CalmAVを使ってその辺の設定ができそうだ。
というわけで、実際に設定してみることにする。

まずはSquid(+α)をpfSenseにインストールする。
Webコンソールから「[System] > [Package Manager] > [Available Packages]」を開き、Squidをインストールする。

20160814_221923000000

 

次に、「[Services] > [Squid Proxy Server] > [General]」を開き、以下の項目について設定する。

  • Enable Squid Proxy … チェック
  • Keep Settings/Data … チェック
  • Proxy Interface(s) … フィルタリングするポートを選択
  • Transparent HTTP Proxy … チェック
  • Transparent Proxy Interface(s) … フィルタリングするポートを選択

 

最後に、「[Services] > [Squid Proxy Server] > [Antivirus]」を開き、Enableにチェックを入れることでウィルスチェック透過プロキシとして動作してくれる。
普通にhttp透過ウィルスチェックプロキシとしては問題なく使える。

…のだけど、SSL透過機能(SSL interception?というようだ)を有効にすると、どうも動作が芳しくない。
オレオレ証明書を間に入れたからか、SSL証明書がちゃんとしたサイトでも信用できないサイトとして扱われてしまうし…
あと、一度証明書を展開してから再度暗号化してるからか、CPU使用率が引きあがってAPU1Dだと使い物にならなかった。

うーん…
うまいことhttpsのページでもうまくウィルスチェックさせられればいいんだけどなぁ…難しいかな

Viewing all 1028 articles
Browse latest View live