2013年12月16日月曜日

CentOS 5.8 に最新のopenssh-6.4p1をインストールする。

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

詳しくはOpenSSH-6.4p1 日本語マニュアルページ




番外編: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!