OpenSSH 5.8のビルドとインストール on Fedora
普段使っているツールをもっと理解しようと思い、OpenSSHを触ってみました。といっても、今日のメモは、ツールを入手して使える状態にするところまでですが。
以下は、自分向けのまとめ。
# 誤解や、方法が間違っているところがあれば、指摘を頂けると嬉しいです。
ビルドとインストール
Fedora 15で、最新の移植版OpenSSHをビルドします。Fedora 15には、SSHが元々インストールされています*1。手元の環境(Linux 2.6.38.6-26.rc1.fc15.x86_64)では、SSH 5.6が入っていました。しかし、セキュリティ上最新版を使った方がよいのと、ビルド作業も勉強になるという理由で、改めてビルドを行います。
OpenSSH本体のダウンロード
OpenSSHのLinux移植版をダウンロードして、解凍します。2011年6月12日時点の最新バージョンは、5.8でした。
依存ライブラリのインストール
README.platformのLinuxの項を参考に、zlib-devel、openssl-devel、pam-develをインストールします。
$ sudo yum install zlib-devel openssl-devel pam-devel
もちろん、gccが入っていなければインストールしておきます。
configure
configureスクリプトを実行します。
$ ./configure --with-md5-passwords --with-tcp-wrappers
上では、オプションを2つ指定しています。
configureを実行すると、次のエラーが出る場合があります。
checking for libwrap... configure: error: *** libwrap missing^
sshdがlibwrapを必要とします。ここでは、実行ファイル(soファイル)はあるものの、コードがないので怒られていました。tcp_wrappers-develをインストールすると解決します。
$ sudo yum install tcp_wrappers-devel
インストール結果の確認
エラーを出さずにmake installできたら、優先的に実行されるSSHが、今回ビルドしたバージョンに変わったことを確認します。
$ ssh -V OpenSSH_5.8p2, OpenSSL 1.0.0d-fips 8 Feb 2011 $ /usr/bin/ssh -V OpenSSH_5.6p1, OpenSSL 1.0.0d-fips 8 Feb 2011 $ /usr/local/bin/ssh -V OpenSSH_5.8p2, OpenSSL 1.0.0d-fips 8 Feb 2011
SSHはOKのようです。
しかし、自機にtelnet接続してみると、表示されるバージョンが古いままです。
$ telnet localhost 22 Trying ::1... Connected to localhost. Escape character is '^]'. SSH-2.0-OpenSSH_5.6
この時に表示されるSSHは、サーバーデーモン、つまりsshdです。
sshdを再起動してみても、結果は変わりません。
$ sudo /etc/init.d/sshd restart Restarting sshd (via systemctl): [ OK ]
…というところでやっと気づきましたが、起動スクリプトで、元々インストールされていたsshdが実行されるのが原因でした。ヒィ、恥ずかしい。。
起動スクリプトを編集します。
$ cp /etc/init.d/sshd ~/sshd.backup $ sudo vi /etc/init.d/sshd
バックアップを取っておいて、次の箇所を変更します。
# 変更箇所を明示 # config: /etc/ssh/ssh_host_key # config: /etc/ssh/ssh_host_key.pub # config: /etc/ssh/ssh_random_seed # !config: /etc/ssh/sshd_config オリジナル # config: /usr/local/etc/sshd_config 変更後 # pidfile: /var/run/sshd.pid (略) # コメントアウト行はオリジナル、直後の行が追記したもの。 # Some functions to make the below more readable #KEYGEN=/usr/bin/ssh-keygen KEYGEN=/usr/local/bin/ssh-keygen #SSHD=/usr/sbin/sshd SSHD=/usr/local/sbin/sshd RSA1_KEY=/etc/ssh/ssh_host_key RSA_KEY=/etc/ssh/ssh_host_rsa_key DSA_KEY=/etc/ssh/ssh_host_dsa_key PID_FILE=/var/run/sshd.pid start() { [ -x $SSHD ] || exit 5 # 新しくインストールした方の設定ファイルを使う #[ -f /etc/ssh/sshd_config ] || exit 6 [ -f /usr/local/etc/sshd_config ] || exit 6 (略) }
新しいバージョンに差し替えるのは、ssh-keygenとsshdのコマンド、設定ファイルだけです。ホストの鍵ファイルは変更しません。なぜなら、ホストの鍵は一度使ったら変更しないのが原則だからです。マシンがすでにサーバとして接続を受けつけていた場合、ホストの鍵が変わると、他のマシンから別のマシンになったと認識されてしまいます。
なお、今回はOSのインストール直後で、SSHサーバも未使用の状態でしたが、そのあたりの背景を学習する都合上、元のSSHに付いてきたホスト鍵を使いました。
変更したファイルを保存して、sshdを再起動し、もう一度telnetで接続します。
$ telnet localhost 22 Trying ::1... Connected to localhost. Escape character is '^]'. SSH-2.0-OpenSSH_5.8
バージョン5.8のsshdが動いていることを確認できます。
これで、最新版のOpenSSHを使えるようになりました。
・・・ネコを挟みながらどこかへ続きます・・・(http://www.linkstyle.co.jp/)
*1:Webサーバ構成で、パッケージをカスタマイズせずにインストールした場合は、入っています