rpmbuildでCentOSのopensshを最新版(openssh-6.4p1)にバージョンアップしました。
今回の作業環境は、CentOS5.8(i386)でした。
CentOS5.xは、yumから取得可能なopensshのバージョンが4.3p2-72.el5と非常に古いです。
そこで今回は、最新版のopenssh(現時点での最新はバージョンopenssh-6.4p1)をインストールしてみました。
参考にさせて頂いたサイトです。
最新版のダウンロードはこちらから。
それでは、幾つかのパートに分けて作業の進行を紹介しています。
rpmパッケージの作成
① 作業を行うディレクトリへ移動します。 [root@localhost ~]# cd /usr/local/src/ ② 最新版のopensshをダウンロードします。 [root@localhost src]# wget http://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.4p1.tar.gz ~中略~ 100%[=============================================================================>] 1,201,402 1.88M/s 時間 0.6s 2013-12-31 23:59:59 (1.88 MB/s) - `openssh-6.4p1.tar.gz' へ保存完了 [1201402/1201402] ③ ダウンロードしたopensshを伸張します。 [root@localhost src]# tar xvzf openssh-6.4p1.tar.gz ④ 不要となったアーカイブを削除。 [root@localhost src]# rm -f openssh-6.4p1.tar.gz ⑤ openssh.specファイルを編集します。(参考元のままです) [root@localhost src]# vi openssh-6.4p1/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 ~ # インストールされているzlibのバージョンが1.2.3以上であれば記述不要のようです。 %configure \ --without-zlib-version-check \ --sysconfdir=%{_sysconfdir}/ssh \ ⑥ 不要なディレクトリを削除します。 [root@localhost src]# rm -rf openssh-6.4p1/contrib/aix/ [root@localhost src]# rm -rf openssh-6.4p1/contrib/caldera/ [root@localhost src]# rm -rf openssh-6.4p1/contrib/cygwin/ [root@localhost src]# rm -rf openssh-6.4p1/contrib/hpux/ [root@localhost src]# rm -rf openssh-6.4p1/contrib/solaris/ [root@localhost src]# rm -rf openssh-6.4p1/contrib/suse/ ⑦ 圧縮してタ~ボールに戻します。 [root@localhost src]# tar cvzf openssh-6.4p1.tar.gz openssh-6.4p1/ ⑧ 圧縮して不要となった元フォルダを削除。 [root@localhost src]# rm -rf openssh-6.4p1 ⑨ タ~ボールをビルドしてRPMパッケージを作成します。 [root@localhost src]# rpmbuild -tb --clean openssh-6.4p1.tar.gz ⑩ 作成されたRPMパッケージを確認。 [root@localhost src]# ls /usr/src/redhat/RPMS/i386/ openssh-6.4p1-1.i386.rpm openssh-clients-6.4p1-1.i386.rpm openssh-server-6.4p1-1.i386.rpm
これでパッケージの作成までは完了です。
次はいよいよ(`・ω・) インストール。 (その前に旧バージョンの削除)
インストール済みのopensshの削除
参考にさせて頂いたページの様に、「rpm -Uvh (パッケージ名)」でアップデートが出来なかった(相互依存のエラーが出た)ので、一度削除しました。
あと、リモート環境で作業を行う場合は十分に気をつけて下さい。
切断されると大変です(・_・;)
① sshdの停止。 [root@localhost ~]# /etc/init.d/sshd stop ② opensshの削除。(git, perl-Gitも削除されてしまいます!) [root@localhost ~]# yum remove openssh =================================================================================================================================== Package Arch Version Repository Size =================================================================================================================================== Removing: openssh i386 4.3p2-72.el5 installed 727 k Removing for dependencies: git i386 1.7.11.1-1.el5.rf installed 17 M openssh-clients i386 4.3p2-72.el5 installed 850 k openssh-server i386 4.3p2-72.el5 installed 480 k perl-Git i386 1.7.11.1-1.el5.rf installed 116 k Transaction Summary =================================================================================================================================== Remove 5 Package(s) Reinstall 0 Package(s) Downgrade 0 Package(s)
作成した最新版opensshのインストール
インストールされていた旧opensshを削除したら、作成したRPMパッケージをインストールします。
[root@localhost ~]# rpm -ivh /usr/src/redhat/RPMS/i386/openssh-6.4p1-1.i386.rpm 準備中... ########################################### [100%] 1:openssh ########################################### [100%] [root@localhost ~]# rpm -ivh /usr/src/redhat/RPMS/i386/openssh-clients-6.4p1-1.i386.rpm 準備中... ########################################### [100%] 1:openssh-clients ########################################### [100%] [root@localhost ~]# rpm -ivh /usr/src/redhat/RPMS/i386/openssh-server-6.4p1-1.i386.rpm 準備中... ########################################### [100%] 1:openssh-server ########################################### [100%]
あっという間に完了(・д・)=3
これでMatch(version 4.4以降の機能)を思う存分使えます!
[root@localhost ~]# cat /etc/ssh/sshd_config ~中略~ Match User username PasswordAuthentication yes
Matchに指定出来る条件
Address | アクセス元のIPアドレス |
Host | アクセス元のホスト名 |
User | ログインするユーザーのユーザ名 |
Group | ログインするユーザーのグループ名 |
Matchに指定出来る項目
AcceptEnv | AllowAgentForwarding | AllowGroups | AllowTcpForwarding |
AllowUsers | AuthenticationMethods | AuthorizedKeysCommand | AuthorizedKeysCommandUser |
AuthorizedKeysFile | AuthorizedPrincipalsFile | Banner | ChrootDirectory |
DenyGroups | DenyUsers | ForceCommand | GatewayPorts |
GSSAPIAuthentication | HostbasedAuthentication | HostbasedUsesNameFromPacketOnly | KbdInteractiveAuthentication |
KerberosAuthentication | MaxAuthTries | MaxSessions | PasswordAuthentication |
PermitEmptyPasswords | PermitOpen | PermitRootLogin | PermitTTY |
PermitTunnel | PubkeyAuthentication | RekeyLimit | RhostsRSAAuthentication |
RSAAuthentication | X11DisplayOffset | X11Forwarding | X11UseLocalHost |
番外編:rpmbuildでエラーが発生
わたしの場合、rpmbuildでエラーが発生しちゃいました。
内容は「依存パッケージがない~」というものでしたのでyumでちゃちゃっと入れました。
pam-develが足りない場合
configure: error: PAM headers not found エラー: /var/tmp/rpm-tmp.18521 の不正な終了ステータス (%build) RPM ビルドエラー: /var/tmp/rpm-tmp.18521 の不正な終了ステータス (%build) [root@localhost ~]# yum install pam-devel Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile ~中略~ Running Transaction Updating : pam 1/3 Installing : pam-devel 2/3 Cleanup : pam 3/3 Installed: pam-devel.i386 0:0.99.6.2-12.el5 Dependency Updated: pam.i386 0:0.99.6.2-12.el5 Complete!
gccが無い場合
configure: error: C compiler cannot create ...略 [root@localhost ~]# yum install gcc Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile ~中略~ Running Transaction Updating : libgcc 1/12 Updating : libstdc++ 2/12 Updating : cpp 3/12 Updating : gcc 4/12 Updating : libstdc++-devel 5/12 Updating : gcc-c++ 6/12 Cleanup : libstdc++ 7/12 Cleanup : gcc 8/12 Cleanup : gcc-c++ 9/12 Cleanup : libstdc++-devel 10/12 Cleanup : cpp 11/12 Cleanup : libgcc 12/12 Updated: gcc.i386 0:4.1.2-54.el5 Dependency Updated: cpp.i386 0:4.1.2-54.el5 gcc-c++.i386 0:4.1.2-54.el5 libgcc.i386 0:4.1.2-54.el5 libstdc++.i386 0:4.1.2-54.el5 libstdc++-devel.i386 0:4.1.2-54.el5 Complete!