脆弱性が多いというOpenSSH5.3(CentOS6のデフォルト)を6.4にバージョンアップする手順

# はじめに
さくらのVPS(CentOS6)で、OpenSSHを最新版の6.8(2015/03/30現在)にアップデートする手順です。CentOS6なら、さくらVPS以外でも通用します。
＊iwaim@github さんにご指摘をいただきニュアンスを少し修正しました(^^;

## ~~絶対にコンソールかtelnet必要です！~~
~~途中でSSHを再起動するので、 _絶対にコンソールかtelnetでログイン_ した状態で開始してください。~~

[追記]crondでsshdの起動有無をチェックし、落ちていたら立ち上げる方法を加えたので、コンソールログイン(ブラウザからログインするターミナル)無しでも完遂できるような手順になりました。


# 手順
なるべく長く現行SSHで操作していきますので、あえて「コンソールかtelnet」と記載の無いところは、SSHのままでOKです。
＊さくらのVPSコンソールだとコピペできないので(^^;

## 現在のSSHバージョン確認
```:shell
# sshd -V
```

## 必要なパッケージのインストール
```:shell
# yum -y groupinstall "Base" "Development tools"
# yum -y install openssl-devel krb5-devel pam-devel tcp_wrappers-devel
```

## rootのホームに移動して、OpenSSH6.4をDL→カスタマイズ
```:shell
# cd
# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.8p1.tar.gz
# tar zxvf openssh-6.8p1.tar.gz
# cp openssh-6.8p1/contrib/redhat/openssh.spec{,.org}
```

```:shell
# vi openssh-6.8p1/contrib/redhat/openssh.spec
```

で、以下の箇所を編集します。

```:openssh.spec
%define no_x11_askpass 1    # 0 -> 1
%define no_gnome_askpass 1  # 0 -> 1
```

不要ディレクトリを削除して、`configure`します。

```:shell
# cd openssh-6.8p1/contrib/
# rm -rf aix/ caldera/ cygwin/ hpux/ solaris/ suse/
# cd ..
# ./configure --without-zlib-version-check
```

パッケージを作って、ビルドします。

```:shell
# cd ..
# tar czvf openssh-6.8p1.cust.tar.gz openssh-6.8p1/
# rm -rf openssh-6.8p1
# rpmbuild --tb --clean openssh-6.8p1.cust.tar.gz
```

以下のディレクトリに移動し、`openssh*6.8*.rpm`が４つビルドされていればOKです。

```:shell
# cd /root/rpmbuild/RPMS/x86_64
# ls -l
```

## インストール
その前に古いバージョンのSSHをここでアンインストールします。
＊詳しく調べていませんが、手順の最初にopensshをアンインストールしても、古いバージョンが復活してしまっているので・・・

```:shell
# yum -y remove openssh
```

SSHのバージョン6.8をインストールします。

```:shell
# rpm -Uvh openssh-6.8p1-1.x86_64.rpm
# rpm -Uvh openssh-server-6.8p1-1.x86_64.rpm
# rpm -Uvh openssh-clients-6.8p1-1.x86_64.rpm
# rpm -Uvh openssh-debuginfo-6.8p1-1.x86_64.rpm
```

## 設定ファイルの編集
ここで古い`sshd_config`のオリジナルバックアップ(私は必ず`.org`で作成します)を`5.3`で念のためリネームし、最新の`sshd_config`を`.org`でバックアップします。

```:shell
# mv /etc/ssh/sshd_config.org{,.5.3}
# cp /etc/ssh/sshd_config{,.org}
```

sshdの設定ファイルがデフォルトに戻ってしまうため、

```:shell
# vi /etc/ssh/sshd_config
```

で、最低限のセキュリティ設定を施します。

```:sshd_config
Port [任意のポート番号]
PermitRootLogin no
PermitEmptyPasswords no   # 鍵認証の前提
#PasswordAuthentication yes
PasswordAuthentication no
UsePAM no
```

## 自動起動の設定
サーバ起動時にsshdも自動起動するようにすでに設定済みだと想いますが、念のため。

```:shell
# chkconfig sshd on
# chkconfig sshd --list
```

--- 追記ここから ---

## [追記]コンソール or telnet不要な方法

crondでsshd起動有無をチェックする方法になります。

### sshd起動有無をチェックするシェル作成

```:shell
# vi /root/monitor_sshd.sh
```

```
#!/bin/sh
SSHD=/etc/init.d/sshd
CHECK=`$SSHD status | grep running`
if [ "$CHECK" = "" ]; then
  $SSHD start
fi
```

### 同シェルに実行権限付与 _重要_

```:shell
# chmod +x /root/monitor_sshd.sh
```

### crond設定

```:shell
# crontab -e
```

```:crontabの内容(操作方法はvi/vimと同じです)
* * * * * /root/monitor_sshd.sh 2>&1 1>/dev/null
```

### 旧バージョンsshd停止

下記コマンドで、一旦接続は切れるが(ここまでの操作に誤りがなければ)最長１分後には新バージョンのsshdが起動しています。

```:
# /etc/rc.d/init.d/sshd stop
```

### 別途ターミナルからsshログイン

```:shell
# ssh user@192.0.2.1
```

--- 追記ここまで ---


## コンソール必須の方法(crondでsshdチェックしない古い手順)
### sshd再起動←ここだけはコンソールかtelnetで実行です！

```:コンソールかtelnet
# /etc/rc.d/init.d/sshd restart
```



## バージョンアップ確認

```:shell
# sshd -V
OpenSSH_6.8p1, OpenSSL 1.0.1e-fips 11 Feb 2013
```

## SSH接続確認
`sshd_config`の設定に間違いがなければ、これまでどおりSSHログイン可能なはずなので、確認して完了です。


# lsyncdが消えた！
lsyncd＋rsyncで複数台の同期設定をしている場合、旧sshdをアンインストールしたタイミング？でlsyncdが消えてしまうので、再度インストールが必要でした。

## lsyncdの再インストール
```:shell
# yum --enablerepo=rpmforge install lsyncd
```

## 設定ファイル戻し
元々の設定ファイルは `/etc/lsyncd.conf.rpmsave` に残っているはずなので

```:shell
# cp /etc/lsyncd.conf.rpmsave /etc/lsyncd.conf
```

## ログをtail

```:shell
# tail -f /var/log/lsyncd.log
```

## lsyncd起動

```:shell
# /etc/rc.d/init.d/lsyncd start
```
ログで起動を確認できる。


## lsyncd自動起動設定

```:shell
# chkconfig lsyncd --list
# chkconfig lsyncd on
# chkconfig lsyncd --list
```

実際のファイル同期の確認で完了。

# 超参考情報
6.4の情報がなかったのと、どれか１つだけではコンパイル／リンクエラーをクリアできなかったものの、相当参考になりました。

[SSHの再インストール](http://begin-centos.com/archives/2013/0216_201255.html)
[シドニーで働くプログラマーのBlog](http://blog.mizoshiri.com/archives/971)
[CentOS(64bit)用のopenssh5.9のrpmを作ってみた](http://blogs.yahoo.co.jp/beachinside/8788967.html)
[CentOS6.2にOpenssh 5.9p1をインストール時にRPM ビルドエラー](http://blog.mizoshiri.com/archives/1284)
[CentOS での OpenSSH バージョンアップ](http://www.yosakoi-dance.net/blog/?p=7417)
[CentOS5.5にopenssh-5.6をインストールのメモ](http://blog.mizoshiri.com/archives/971)
[№2324 OPEN SSH rpmbuildエラー その２](http://centossrv.com/bbshtml/webpatio/2324.shtml)
[Index of /pub/OpenBSD/OpenSSH/portable](http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/)