openssl を入れ替えようとしたら ssh が死んで通信ができなくなった話


# サマリー

##やろうとしたこと
admin1, admin2 サーバの openssl の入れ替えを yum で行おうとしたらyumのパッケージが古かった。
↓
しかたなくソースから入れよう

##やってしまったこと

srcをとってきてからrpmにしてっていう手順を調べていたら
webで丁度いい例を発見。
↓
盲目的にコマンド連打。
↓
opensslのバージョンアップ成功！確認もOK！
↓
安心して同じ作業を別のサーバでやろうとして
rpm を admin2 に scp しようとしたら
できない。。

※このサーバはsshが死ぬと物理的にそこまでいかないといけない。
 そしてだいぶ遠くにある。。

## なんとかした方法

rsync プロトコルで通信
↓
openssl のバージョンを元に戻すことに成功

#詳細

##失敗に至るまで
openssl を入れ替えるぞー
``` [root@admin01 src]# wget https://www.openssl.org/source/openssl-0.9.8za.tar.gz
[root@admin01 src]# yum install rpm-build -y
[root@admin01 src]# rpmbuild -ta openssl-0.9.8za.tar.gz
[root@admin01 src]# rpm -Uvh --nodeps /usr/src/redhat/RPMS/x86_64/*.rpm
準備中...                ########################################### [100%]
   1:openssl                ########################################### [ 33%]
   2:openssl-devel          ########################################### [ 67%]
   3:openssl-doc            ########################################### [100%]
```

入れ替え確認
```[root@admin01 src]# openssl version
OpenSSL 0.9.8za 5 Jun 2014
```

よし入れ替わった！

apache が再起動できない。
```[root@admin01 src]# /usr/local/apache2/bin/apachectl restart
/usr/local/apache2/bin/httpd: error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directory
```
wget もできない。
```[root@admin01 src]# wget yahoo.co.jp
wget: error while loading shared libraries: libssl.so.6: cannot open shared object file: No such file or directory
```
yum できない
```[root@admin01 src]# yum
Traceback (most recent call last):
  File "/usr/bin/yum", line 4, in ?
    import yum
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 50, in ?
    import config
  File "/usr/lib/python2.4/site-packages/yum/config.py", line 27, in ?
    from parser import ConfigPreProcessor
  File "/usr/lib/python2.4/site-packages/yum/parser.py", line 3, in ?
    import urlgrabber
  File "/usr/lib/python2.4/site-packages/urlgrabber/__init__.py", line 53, in ?
    from grabber import urlgrab, urlopen, urlread
  File "/usr/lib/python2.4/site-packages/urlgrabber/grabber.py", line 412, in ?
    import keepalive
  File "/usr/lib/python2.4/site-packages/urlgrabber/keepalive.py", line 339, in ?
    class HTTPSHandler(KeepAliveHandler, urllib2.HTTPSHandler):
AttributeError: 'module' object has no attribute 'HTTPSHandler'
```
よく見たら依存関係無視オプションがついていた！！！
```rpm -Uvh --nodeps /usr/src/redhat/RPMS/x86_64/*.rpm
```

完全に孤立した。。


##解決策

サーバ自体は死んでいない。
sshができないだけ。
opensslだけ元のバージョンに戻してやればOKのはず。
だがsshができないと大体の通信コマンドが死んでしまう。。

そこで、
rsync プロトコル！
隣のサーバからモジュールを渡す！
```[root@admin01 src]# vi /etc/rsyncd.conf
uid=root
gid=root
[export]
path=/tmp
comment= export path
read only=false
[root@admin01 src]# rsync --daemon -v --config=/etc/rsyncd.conf
```

admin2 にてopnesslの思しきバージョンを取得。
```[root@admin02 src]# wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/openssl-0.9.8e-27.el5_10.3.x86_64.rpm
[root@admin02 src]# wget http://ftp.riken.jp/Linux/centos/5/updates/x86_64/RPMS/openssl-devel-0.9.8e-27.el5_10.3.x86_64.rpm
```

admin2 から admin1 へ rsync ！
```[root@admin02 src]# rsync openssl-*.rpm rsync://admin1/export/
```

取得確認！
```[root@admin01 src]# ll /tmp/openssl*
openssl-0.9.8e-27.el5_10.3.x86_64.rpm
openssl-devel-0.9.8e-27.el5_10.3.x86_64.rpm
```

rpm でバージョンダウン！
```[root@admin01 src]# rpm -Uhv --oldpackage /tmp/openssl-0.9.8e-27.el5_10.3.x86_64.rpm
準備中...                ########################################### [100%]
   1:openssl                ########################################### [100%]
[root@admin01 src]# rpm -Uhv --oldpackage /tmp/openssl-devel-0.9.8e-27.el5_10.3.x86_64.rpm
準備中...                ########################################### [100%]
   1:openssl-devel          ########################################### [100%]
```

さっきダメだった wget を再度確認する。
```[root@admin01 src]# wget yahoo.co.jp
--2014-06-06 17:24:17--  http://yahoo.co.jp/
10.105.128.16:8080 に接続しています... 接続しました。
Proxy による接続要求を送信しました、応答を待っています... 301 Moved Permanently
場所: http://www.yahoo.co.jp/ [続く]
--2014-06-06 17:24:17--  http://www.yahoo.co.jp/
10.105.128.16:8080 に接続しています... 接続しました。
Proxy による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
index.html に保存中
    [ <=>
2014-06-06 17:24:17 (4.81 MB/s) - `index.html' へ保存終了 [22276]
```
wget が生き返った！！！

あとは openssl-0.9.8za を別ディレクトリにインストールし、apache2.2 を再コンパイル！
1時間ほどごにょごにょやって apache2.2 + openssl の入れ替え完了！

#オチ
```[2014/06/06 18:42:54] 松井: 完了しました！
[2014/06/06 19:21:06] おりたさん : ありがとうございます！
[2014/06/06 19:29:05] おりたさん : ちなみに松井さんはyum updateでよかったらしいです
https://rhn.redhat.com/errata/RHSA-2014-0624.html
[2014/06/06 19:30:17] おりたさん: openssl-0.9.8e-27.el5_10.3.x86_64.rpm
これCVE-2014-0224対応済みのパッケージ
```