Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

さくらの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が4つビルドされていれば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停止

下記コマンドで、一旦接続は切れるが(ここまでの操作に誤りがなければ)最長1分後には新バージョンの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の情報がなかったのと、どれか1つだけではコンパイル/リンクエラーをクリアできなかったものの、相当参考になりました。

SSHの再インストール
シドニーで働くプログラマーのBlog
CentOS(64bit)用のopenssh5.9のrpmを作ってみた
CentOS6.2にOpenssh 5.9p1をインストール時にRPM ビルドエラー
CentOS での OpenSSH バージョンアップ
CentOS5.5にopenssh-5.6をインストールのメモ
№2324 OPEN SSH rpmbuildエラー その2
Index of /pub/OpenBSD/OpenSSH/portable

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away