はじめに
さくらのVPS(CentOS6)で、OpenSSHを最新版の6.8(2015/03/30現在)にアップデートする手順です。CentOS6なら、さくらVPS以外でも通用します。
*iwaim@github さんにご指摘をいただきニュアンスを少し修正しました(^^;
絶対にコンソールかtelnet必要です!
途中でSSHを再起動するので、 絶対にコンソールかtelnetでログイン した状態で開始してください。
[追記]crondでsshdの起動有無をチェックし、落ちていたら立ち上げる方法を加えたので、コンソールログイン(ブラウザからログインするターミナル)無しでも完遂できるような手順になりました。
手順
なるべく長く現行SSHで操作していきますので、あえて「コンソールかtelnet」と記載の無いところは、SSHのままでOKです。
*さくらのVPSコンソールだとコピペできないので(^^;
現在のSSHバージョン確認
# sshd -V
必要なパッケージのインストール
# yum -y groupinstall "Base" "Development tools"
# yum -y install openssl-devel krb5-devel pam-devel tcp_wrappers-devel
rootのホームに移動して、OpenSSH6.4をDL→カスタマイズ
# 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}
# vi openssh-6.8p1/contrib/redhat/openssh.spec
で、以下の箇所を編集します。
%define no_x11_askpass 1 # 0 -> 1
%define no_gnome_askpass 1 # 0 -> 1
不要ディレクトリを削除して、configure
します。
# cd openssh-6.8p1/contrib/
# rm -rf aix/ caldera/ cygwin/ hpux/ solaris/ suse/
# cd ..
# ./configure --without-zlib-version-check
パッケージを作って、ビルドします。
# 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です。
# cd /root/rpmbuild/RPMS/x86_64
# ls -l
インストール
その前に古いバージョンのSSHをここでアンインストールします。
*詳しく調べていませんが、手順の最初にopensshをアンインストールしても、古いバージョンが復活してしまっているので・・・
# yum -y remove openssh
SSHのバージョン6.8をインストールします。
# 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
でバックアップします。
# mv /etc/ssh/sshd_config.org{,.5.3}
# cp /etc/ssh/sshd_config{,.org}
sshdの設定ファイルがデフォルトに戻ってしまうため、
# vi /etc/ssh/sshd_config
で、最低限のセキュリティ設定を施します。
Port [任意のポート番号]
PermitRootLogin no
PermitEmptyPasswords no # 鍵認証の前提
#PasswordAuthentication yes
PasswordAuthentication no
UsePAM no
自動起動の設定
サーバ起動時にsshdも自動起動するようにすでに設定済みだと想いますが、念のため。
# chkconfig sshd on
# chkconfig sshd --list
--- 追記ここから ---
[追記]コンソール or telnet不要な方法
crondでsshd起動有無をチェックする方法になります。
sshd起動有無をチェックするシェル作成
# vi /root/monitor_sshd.sh
#!/bin/sh
SSHD=/etc/init.d/sshd
CHECK=`$SSHD status | grep running`
if [ "$CHECK" = "" ]; then
$SSHD start
fi
同シェルに実行権限付与 重要
# chmod +x /root/monitor_sshd.sh
crond設定
# crontab -e
* * * * * /root/monitor_sshd.sh 2>&1 1>/dev/null
旧バージョンsshd停止
下記コマンドで、一旦接続は切れるが(ここまでの操作に誤りがなければ)最長1分後には新バージョンのsshdが起動しています。
# /etc/rc.d/init.d/sshd stop
別途ターミナルからsshログイン
# ssh user@192.0.2.1
--- 追記ここまで ---
コンソール必須の方法(crondでsshdチェックしない古い手順)
sshd再起動←ここだけはコンソールかtelnetで実行です!
# /etc/rc.d/init.d/sshd restart
バージョンアップ確認
# sshd -V
OpenSSH_6.8p1, OpenSSL 1.0.1e-fips 11 Feb 2013
SSH接続確認
sshd_config
の設定に間違いがなければ、これまでどおりSSHログイン可能なはずなので、確認して完了です。
lsyncdが消えた!
lsyncd+rsyncで複数台の同期設定をしている場合、旧sshdをアンインストールしたタイミング?でlsyncdが消えてしまうので、再度インストールが必要でした。
lsyncdの再インストール
# yum --enablerepo=rpmforge install lsyncd
設定ファイル戻し
元々の設定ファイルは /etc/lsyncd.conf.rpmsave
に残っているはずなので
# cp /etc/lsyncd.conf.rpmsave /etc/lsyncd.conf
ログをtail
# tail -f /var/log/lsyncd.log
lsyncd起動
# /etc/rc.d/init.d/lsyncd start
ログで起動を確認できる。
lsyncd自動起動設定
# 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