sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

hadoopクラスタを設定する場合、sshでパスワードを入力しないですむように設定をしてやる必要がある。
個人的に確認するぐらいならパスワード空文字でもいいんだけど、仕事で使う場合はさすがにそれはまずいだろ、
ということでssh-agentの設定方法を確認した。

実用SSH 第2版―セキュアシェル徹底活用ガイド

実用SSH 第2版―セキュアシェル徹底活用ガイド


この本が無茶苦茶くわしいので、これを参考にする。

事前準備

Solaris10DHCP接続するときに、ホスト名をもらってくれていないので、その設定を行う。

/etc/default/dhcpagent

REQUEST_HOSTNAME=yes

/etc/hostname.インタフェース名

inet hogehoge

ここまでやってみたけど、hostnameがunknownのままで、解決しなかった。。
unknownは萎えるので、/etc/nodenameにホスト名を記入した。

/etc/nodename

hogehoge

まずはローカルで鍵の生成

なんとなくRSA鍵にしてみる。

% ssh-keygen -t rsa 

鍵をリモートホストへコピー

普通にコピーしてもいいんだけど、ssh-copy-idコマンドを使おうとしてみた。
ちなみに、上記「実用SSH」によると、注意点があるらしいので本で内容を確認して、自分はそのケースに該当しないので、そのまま実行。

% ssh-copy-id -i id_rsa user@remotehost

楽チンなコマンドだなーと思っていたら、Solaris10には用意されていなかった。
しょうがないので、手動でリモートサーバにコピーして、~/.ssh/authorized_keysの末尾に追加する。

scp id_rsa.pub usr@remotehost:

(remotehostでaurhorized_keysの末尾が改行されているのを確認した後。)

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

↑これだと末尾に改行が入らないので、今後、鍵を追加するときのために、最後に改行を手動で追加しておいた。

ここまでで、リモートユーザのOSパスワードではなく、ローカルの秘密鍵へのパスフレーズでリモートログインが可能になった。(リモートユーザのOSパスワードがネットワークを流れない。)

ssh-agentの動作確認

まずはssh-agentが動作するかどうかだけを確認。

% ssh-agent $SHELL
% ssh-add

エージェントを起動し、秘密鍵をエージェントに持たせる。

この状態で、リモートホストに接続するとパスフレーズを入力しなくてもよい。

% ssh user@remotehost

ssh-agentの自動起動

ここまででssh-agentを使えば、リモートホストにパスワードなしでログインできる状態を実現することが可能なのは確認できた。

後は、ssh-agentをユーザのログイン時などに自動で起動して鍵をエージェントに持たせるようにしておけば、Hadoopが管理作業でリモートホストにログインするときでもパスワードなしで、すべての処理を行ってくれるようになる。(このエントリの目的はここ。)

と、意気込んでみたが、この後「実用SSH」の本の通りに設定しても、ログイン時の起動スクリプトがうまく動作しなかった。
とりあえず、今日はここであきらめる。さしあたってHadoopを使うときは、空のパスフレーズを使用することに。。。(冒頭の意見と間逆の結論。)