わーくあうと!

日々の作業でためになったことをアウトプットすることで自分の成長につながればなと。

EC2インスタンスにsshできなかった件

RightScale製のインスタンスを鍵指定無し(AMIの中に公開鍵仕込んでたので必要なかった)で立ち上げてsshしたんだけど

ssh: connect to host 1.2.3.4 port 22: Connection refused

こんな事を言われて入れなかった。
瞬間言われるので多分ネットワークは生きてる。おそらくポート22をListenしているプロセスがいない…?
で、AWS管理画面からシステムログを確認してみると

Fetching list of trusted keys from metadata server...

このログを最後に止まってる。追ってみたらこのログはどうやらgetsshkey(ライトスケールが用意してくれた、インスタンス立ち上げの時に指定した鍵を自動で取得するスクリプト)が出しているようだった。
おそらくこのスクリプトで止まっていてsshd起動までの処理に辿りつけて無い。

という事で、どうもこのスクリプトがいけてなさそう(鍵指定が無いと止まってしまう?)で、このスクリプトを修正するのもなんだかなぁと思ったので、今までやっていた「/etc/rc.local」にスクリプト書いて鍵を取得する方法でやる事にしてみた。


getsshkeyをサービスから外す

chkconfig --del getsshkey

 

/etc/rc.localを下記記事を参考に編集。

http://blog.suz-lab.com/2011/05/suz-lab-centos-ami-562-32bit-ap.html

PUB_KEY_URI=http://169.254.169.254/1.0/meta-data/public-keys/0/openssh-key
PUB_KEY_FROM_HTTP=/tmp/openssh_id.pub
ROOT_AUTHORIZED_KEYS=/root/.ssh/authorized_keys
curl --retry 3 --retry-delay 0 --silent --fail -o $PUB_KEY_FROM_HTTP $PUB_KEY_URI
if [ $? -eq 0 -a -e $PUB_KEY_FROM_HTTP ] ; then
    if ! grep -q -f $PUB_KEY_FROM_HTTP $ROOT_AUTHORIZED_KEYS
    then
        cat $PUB_KEY_FROM_HTTP >> $ROOT_AUTHORIZED_KEYS
        echo "New key added to authrozied keys file from parameters" | logger -t "aws"
        dd if=/dev/urandom count=50 | md5sum | passwd --stdin root
        echo "The root password randomized" | logger -t "aws"
    fi
    chmod 600 $ROOT_AUTHORIZED_KEYS
    rm -f $PUB_KEY_FROM_HTTP
fi

これで行けるようになった。