CentOS6系のOpenSSHは5.3p1となっています。
# cat /etc/redhat-release CentOS release 6.9 (Final) # ssh -V OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
このバージョンはパッチが当てられていて安全に使用できるのですが
脆弱性が多いと噂があり、CentOSのOpenSSHはECDSAの鍵認証を受け付けず、
サポートも対象外なのでいっその事OpenSSHの最新版(7.1p1)へとアップグレードしてみました。
環境
- 使用するOSはCentOS 6.9
- シリアルコンソール、若しくはtelnetからsshdの再起動操作が行えること
conohaのVPSは管理画面からシリアルコンソールを立ち上げられるのでOK。
telnetを利用する場合、本作業終了後に必ず停止すること。
当然ですが、作業中SSHが切断するので
他の作業中の際はアップグレードするのは控えます。
1.必要なやつインストール
開発ツールやらヘッダーファイルやらを入れておく。
# yum groupinstall -y "Base" "Development tools" # yum install -y openssl-devel krb5-devel pam-devel tcp_wrappers-devel
2.ソースを取ってきて展開
執筆時点で最新版であるOpenSSH 7.1p1をダウンロードして展開。
# cd # wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-7.1p1.tar.gz # tar xzvf openssh-7.1p1.tar.gz
3.SPECファイルを弄る
OpenSSHのソースにはこの後行う
RedHat系向けのRPMファイルの構築に必要なSPECファイルが含まれてます。
このSPECファイルにある
「%define no_x11_askpass 0」
と
「%define no_gnome_askpass 0」
の0を1に変更する。
# cd openssh-7.1p1 # cp contrib/redhat/openssh.spec{,.org} # vi contrib/redhat/openssh.spec # cat contrib/redhat/openssh.spec (前略) # Do we want to disable building of x11-askpass? (1=yes 0=no) %define no_x11_askpass 1 # Do we want to disable building of gnome-askpass? (1=yes 0=no) %define no_gnome_askpass 1 (後略)
4.余分なディレクトリを消してconfigure
ontribディレクトリ内のどうでもいいディレクトリを削除しconfigureする。
configureの際に–without-zlib-version-checkを入れないとエラーになるっぽい?(環境依存)
# cd contrib # rm -rf aix/ solaris/ suse/ hpux/ cygwin/ # cd .. # ./configure --without-zlib-version-check
5.RPMを作る
./configureの後はmakeだ!と思いがちですが
opensshのディレクトリのtarballを作ってからrpmbuildでビルドしRPMファイルを生成します。
# cd .. # tar czvf openssh-7.1p1.cust.tar.gz openssh-7.1p1/ # rm -rf openssh-7.1p1 # rpmbuild --tb --clean openssh-7.1p1.cust.tar.gz
64bit環境の場合、/root/rpmbuild/RPMS/x86_64内に4つのRPMファイルができているはず。
# ll /root/rpmbuild/RPMS/x86_64 total 1424 -rw-r--r-- 1 root root 460584 May 16 14:36 openssh-7.1p1-1.x86_64.rpm -rw-r--r-- 1 root root 578076 May 16 14:36 openssh-clients-7.1p1-1.x86_64.rpm -rw-r--r-- 1 root root 16956 May 16 14:36 openssh-debuginfo-7.1p1-1.x86_64.rpm -rw-r--r-- 1 root root 390000 May 16 14:36 openssh-server-7.1p1-1.x86_64.rpm
(ファイルサイズなどは環境によって変わるかも)
6.前のバージョンの削除&新しいバージョンのインスコ
旧バージョンをアンインストールし、新しいバージョンを生成したRPMからインストールします。
yumで旧バージョンをアンインストールする際、
道連れで削除されるパッケージ(gitなど)があるので注意。
# yum remove openssh # rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-7.1p1-1.x86_64.rpm # rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-server-7.1p1-1.x86_64.rpm # rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-clients-7.1p1-1.x86_64.rpm # rpm -Uvh /root/rpmbuild/RPMS/x86_64/openssh-debuginfo-7.1p1-1.x86_64.rpm
7.sshd設定をする
インストールするとsshdの設定が一旦リセットされます。
(旧バージョンをアンインストールする前にバックアップしておいたほうがいいかもしれない)。
念の為オリジナルをバックアップしてから、以前の設定に戻すor最低限の設定を行う。
8.sshd再起動(シリアルコンソール等で行う)
新しいバージョンでsshdを再起動します。
ここでは前述のシリアルコンソールかtelnetを使用しましょう。
※私の場合リモートで作業していたので、sshがぶった切られてビビりました・・・w
# /etc/init.d/sshd restart
9.接続&バージョンチェック
無事に接続できればOK。
sshコマンドで-vオプションを付けるとバージョンが確認できます。
# ssh -V OpenSSH_7.1p1
10.道連れで削除されたパッケージをインストールしなおす
自分の作業にてremoveになったパッケージは以下でした。
まぁあんまり使うことないと思いますが…。
# yum install -y git perl-Git systemtap systemtap-client
おしまい
これでECDSA鍵が使用できますね。