Category Archives: Linux - Page 2

SSHの秘密鍵作成でパスワード認証を省略

今まで行なったHadoopの設定作業。

Hadoopを起動するたびにパスワードを聞かれるので、

うざいからその流れで秘密鍵を作成することになった。



例として以下の3台を用意。

192.168.0.5(マスター)

192.168.0.8(スレーブ)

192.168.0.10(スレーブ)



■目的

192.168.0.5から

192.168.0.5(自分自身)にも

192.168.0.8にも

192.168.0.10にも

接続できるように設定を行なう。



■現状の把握

試しにsshコマンドを打ってみる。

パスワードを聞かれる。

$ ssh hadoop@192.168.0.8
hadoop@192.168.0.8's password:



やっぱりパスワードを聞かれる。

$ ssh hadoop@192.168.0.10
hadoop@192.168.0.10's password:



当然パスワードを聞かれる。

$ ssh hadoop@localhost
hadoop@localhost's password:



■秘密鍵の作成

192.168.0.5で鍵を作成する。

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys



作成されているかチェックしてみる。

$ ls -al ~/.ssh/
合計 20
drwx------  2 hadoop hadoop 4096  2月  6 20:49 .
drwx------  6 hadoop hadoop 4096  2月  6 21:02 ..
-rw-------  1 hadoop hadoop  602  2月  6 20:41 authorized_keys
-rw-------  1 hadoop hadoop  668  2月  6 20:38 id_dsa
-rw-------  1 hadoop hadoop  602  2月  6 20:41 id_dsa.pub
-rw-r--r--  1 hadoop hadoop  881  2月  6 20:51 known_hosts



この時パーミッション(権限)に注意すること。



■スレーブたちに鍵を配置

必要なのは、id_dsa.pub(秘密公開鍵)のみ。



これをスレーブサーバである192.168.0.8にも192.168.0.10にも設置する。

$ scp ~/.ssh/id_dsa.pub hadoop@192.168.0.X:/home/hadoop/authorized_keys
hadoop@192.168.0.X's password:XXXXXXXX



スレーブサーバたちにログインし、authorized_keysを~/.ssh/以下に移動する。

$ mv /home/hadoop/authorized_keys /home/hadoop/.ssh/authorized_keys



前項で解説したパーミッション(権限)に注意すること。



■接続してみる

192.168.0.5からsshで192.168.0.8にも192.168.0.10にもログインしてみる。

$ ssh -i ~/.ssh/id_dsa 192.168.0.8
Last login: Wed Feb  6 20:47:46 2008 from 192.168.0.5
$ ssh -i ~/.ssh/id_dsa 192.168.0.10
Last login: Wed Feb  6 20:47:51 2008 from 192.168.0.5



完了。

シェルスクリプト(sh)で「bad interpreter : No such file or directory」

シェルスクリプト(sh)で「bad interpreter : No such file or directory」が
起きる問題について。

環境によってシェルスクリプトが起動する場合としない場合がある。
改行コードの違いみたい。

今回「Redhat Enterprise Linux(UTF-8)」と「Turbolinux(EUC-JP)」の間で、この現象が起きた。

■参考URL
http://sakaguch.com/pastbbs/0018/B0010047.html

最後の方に
「perlのパス指定で、perlの次にスペースとマイナスを2個入れてみてください。」で
改行コードが原因であると書いてあります。

[Linux]ssh経由でデータベース接続(Foward)

sshを経由して、サーバー上のデータベースやウェブサーバなどに
アクセスできる方法を解説する。

なぜこのようなことをするのかというと、以下のような状況だったから。

・Linuxサーバ上にデータベース環境が構築してあり、
 なおかつ、レコードもその中にあった。
・本番さながらのテストを行ないたかった。
・Linuxサーバは、ルーターでファイアウォール設定がしてある。
・SCPでLinuxサーバに毎回ソースをアップしてテストを行なうのが面倒だった。

で、解説するにあたって「Teraterm」をインストールしてもらう必要がある。
インストール解説は、どっかのサイトで調べてね。

■今回想定している環境
Linuxサーバにssh経由でログインし、ローカル(今回の場合はWindowsマシン)で
サーバ上のMySQLに接続することを想定して解説する。

サーバIP 192.168.0.333
MySQL ポート番号:3306

通常ポート番号「3306」は、ファイアウォール設定がかかっているため、
接続できないはずだが、sshを経由すると簡単に接続することが出来る。

■Teratermを開き、サーバへログイン
Teratermを開き、192.168.0.333にログインする。
とりあえずログインするだけでよい。

■Fowardingを選択
メニューバーの「Setup」→「SSH Fowarding」をクリック

■定義を追加する
「Add」をクリック。
「Foward local port」には、ローカルで使用するときのポート番号を。
Windows上でポート番号何番でデータベースに接続するかを決定する。
まぁ、3306でいいだろう。

先ほどログインしたLinuxサーバ上にMySQLがあることを想定しているので、
「to remote machine」には、「localhost」と入力し、ポートは「3306」
まぁ、どのサーバのどのポートにアクセスしたいかという意味だ。
「OK」をクリック

■実行
設定が完了すると、「Port Forwarding」に設定した値が表示される。
「OK」をクリックし、Teratermは閉じないままにしておく。

■テスト
設定が完了したので、Windowsからlocalhost:3306にデータベース接続してみて。
ほら、あたかもWindows上にMySQLがあるかのように接続できるでしょ?

■参考URL
http://www.ozawa.ics.keio.ac.jp/~kimura/ssh-forward/index.html
http://www.lit.kyushu-u.ac.jp/guide/ssh/win_ftp.html
http://www.center.wakayama-u.ac.jp/Tech-Support/ttssh/index.htm
http://www.u-aizu.ac.jp/~s1120039/forwarding/forwarding.html

本当ならキャプチャでも撮りたいところだったけど、
画像編集ソフトが難しくて断念・・・。

[Linux]exprコマンド

シェルスクリプトで数値計算をする時に、
exprコマンドを利用した。
普通に「+」でつなげると、文字列として認識されてしまうが、
exprコマンドを使用すると数値として「+」してくれる。

■算術演算expr
http://www.wakhok.ac.jp/~maruyama/Unix92/shell2/section2.1.16.html

while文などで回すときに便利ね。
しかし、シェルスクリプトもなかなか面白い。

[Linux]Apacheのlogrotate

Apacheのログが容量を食いつぶさないように
logrotateの設定を行なう。
Apacheが以下にインストールされていることを想定して解説。

/usr/local/apache2

/etc/logrotate.d以下にファイルを作成します。

# vi /etc/logrotate.d/apache2

以下のスクリプトを記述し、保存してください。

/usr/local/apache2/logs/*_log {
rotate 7
daily
postrotate
/usr/bin/kill -HUP `/bin/cat /usr/local/apache2/logs/httpd.pid`
endscript
}

以上で、設定は完了です。

FastCGIのインストール

■mod_fastcgi-2.4.2.tar.gzインストール

http://www.fastcgi.com/

1.mod_fastcgi-2.4.2.tar.gzをダウンロード
2.ファイルを解凍する
3.Makefile.AP2をコピー
4.APACHE_HOMEを変更したい場合は、Makefileをエディタで開き、top_dir部分を編集(デフォルトは/usr/local/apache2?)
5.コンパイル

# wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
# tar -xvzf mod_fastcgi-2.4.2.tar.gz
# cd mod_fastcgi-2.4.2
# cp Makefile.AP2 Makefile
# make
# make install

■apache-2.0.59のhttpd.conf設定

1.以下数行を追加

LoadModule fastcgi_module modules/mod_fastcgi.so
FastCgiServer /home/fcgiuser/public_html/cgi-bin/a.cgi -initial-env LD_LIBRARY_PATH
AddHandler cgi-script .cgi

2.<Directory /home/*/public_html>タグのコメントを外し、「IncludesNoExec」を「ExecCGI」に置換

(記述例)
<Directory /home/*/public_html>
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch ExecCGI
    <Limit GET POST OPTIONS PROPFIND>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS PROPFIND>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

■public_html/cgi-bin/.htaccessの設定
(仮定)
・ユーザー名を「fcgiuser」とする
・作業ディレクトリが/home/fcgiuser/とする

1.public_html,cgi-binディレクトリを作成
2.「.htaccess」ファイルを新規作成し、中身にFastCGI設定をする

cd /home/fcgiuser/
mkdir public_html
cd public_html
mkdir cgi-bin
cd cgi-bin
vi .htaccess

(.htaccessの記述)
<Files a.cgi>
PassEnv LD_LIBRARY_PATH
SetHandler fastcgi-script
</Files>

MySQL5.0.27のインストール(Linux版)

■MySQL5.0のインストール
http://fclinux.blog101.fc2.com/blog-entry-4.html

自動起動設定を行ないたくない場合は、その項目を無視。

ただ、起動スクリプトはコピーしておいた方が良いかもね。

# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
# chmod 755 /etc/rc.d/init.d/mysql

MySQLがパスに通っていない場合は、/etc/bashrcにパスを設定する

export PATH=${PATH}:/usr/local/mysql/bin

保存後sourceコマンドで反映し、以下のコマンドが読み取れれば完了

# mysql -u root

asciiコード

アスキーコードの対応表を表示するコマンド。
man ascii

サイトとデータベースの文字コードが違うことによって、文字化けが発生する。
XMLで表示しようとすると、パースエラーが発生する。
大体の文字列は、カバーできるが、0×00から0x1Fまでは手動で除去すべし。

viで文字コードを変更する

viでテキストファイルを開くと、文字コードが自動的にOSに依存する。
他の文字コードで開きたい場合は、以下のコマンドで開く。

 # vi
 # :e ++enc=文字コード

fdiskでパーティション作成(?)

使用していないハードディスク領域があるので、
それを使用できる状態にする。


1.「/dev/sda6」の領域を使用できる状態にする。
2.最終的にパスは、「/data」とする。

■使用していないHD領域を確認する
# fdisk /dev/sda
# p
(コマンドを聞かれるのでpと打つ)

■パーティション作成
# fdisk /dev/sda6
(/dev/sda6が認識されていないHD領域)
# n
# そのままEnter(startは全領域を対象とする)
# そのままEnter(endは全領域を対象とする)

■フォーマットを行なう
# /sbin/mkfs -t ext3 -c -v /dev/sda6
(多少時間がかかる)

※ext3は、/etc/fstabを見ると、
 「/」や「/boot」がext3になっているから
 同じにした。

■fstabを編集
以下の行を追加する。
/dev/sda6 /data ext3 defaults 1 2

■マウントする
# midir /data
※「/data」ディレクトリはあらかじめ作成しておく

# mount -t ext3 /dev/sda6 /data
※ext3は、フォーマットの時に合わせる。