OpenSSH9.9へのアップデート バイナリファイルを使用し任意のバージョンをインストール

脆弱性があったので9.9p1にアップデートします

### 1 サーバーのバックアップを取得


### 2 現在の SSH バージョンを確認
```
ssh -V
```






### 3 必要なツールをインストール
```
sudo yum groupinstall "Development Tools" -y
```
```
sudo yum install -y wget tar zlib-devel openssl-devel
```


### 4 既存のSSHを停止プロセスを停止
```
systemctl stop sshd
```
```
systemctl status sshd
```
停止を確認


### 5 任意のバージョンの OpenSSH をダウンロード
※2025年1月20日時点ででの最新は9.9p1
```
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz
```

### 6 ダウンロードしたファイルを展開

```
tar -xvf openssh-9.9p1.tar.gz
```
```
cd openssh-9.9p1
```

###  7 インストール用ディレクトリを指定してビルド

#### 7-1既存の SSH と競合しないように、別のパスにインストール。
構成スクリプトを実行: --prefix オプションでインストール先ディレクトリを指定します。

```
./configure --prefix=/usr/local/openssh-9.9 --sysconfdir=/usr/local/openssh-9.9/etc
```

#### 7-2　ビルドとインストール:

```
make
```
```
sudo make install
```



### 8 環境変数 PATH の設定

#### 8-1新しいバージョンを使用するには、環境変数 PATH を調整。

一時的に切り替え: 以下のコマンドを実行すると、新しいバージョンが優先されます。

```
export PATH=/usr/local/openssh-9.9/bin:$PATH
```

#### 8-2永続的に切り替え: シェルの設定ファイルに追記します。

```
echo 'export PATH=/usr/local/openssh-9.9/bin:$PATH' >> ~/.bashrc
```
```
source ~/.bashrc
```



### 9 SSH サービスを起動

#### 9-1新しいバージョンの sshd を動作させる場合は、既存の SSH サーバーと異なるポートで起動。

設定ファイルをコピー: デフォルトの設定ファイルを作成します。

```
sudo mkdir -p /usr/local/openssh-9.9/etc
```
```
sudo cp /etc/ssh/sshd_config /usr/local/openssh-9.9/etc/
```

#### 9-2　ポート番号を変更: /usr/local/openssh-9.9/etc/sshd_config を編集し、Port 22のコメントアウトを外します

```
sudo vi /usr/local/openssh-9.9/etc/sshd_config
```

#### 9-3　新しいバージョンの sshd を起動:
```
sudo /usr/local/openssh-9.9/sbin/sshd -f /usr/local/openssh-9.9/etc/sshd_config
```

#### 9-4　サーバーが正常に動作しているか確認
```
sudo netstat -tuln | grep 22
```


### 10　動作確認

#### 10-1 新しい SSH バージョンを確認
```
ssh -V
```


### 11 新しいSSHサーバーの設定

#### 11-1 新しい SSH サーバーを自動起動設定にする
```
sudo systemctl enable openssh-9.9.service
```

#### 11-2 SSH サーバーが正常に動作しているか確認
```
sudo systemctl status sshd.service
```



### 12 ファイアウォールの設定

#### 12-1 SSHのポート22を開放
```
sudo firewall-cmd --add-service=ssh --permanent
```

#### 12-2 SSH サーバーが正常に動作しているか確認
```
sudo firewall-cmd --reload
```


### 各コマンド解説


#### sudo yum install -y wget tar zlib-devel openssl-devel の解説

CentOSやRHELなどのLinuxディストリビューションで、ソフトウェア開発に必要ないくつかのパッケージを一括でインストールするためのもの。

各部分の解説
sudo:
このコマンドの前に付けることで、root権限で実行できます。つまり、システムの深い部分への変更が可能になります。

yum:
CentOS/RHEL系Linuxでパッケージを管理するためのツールです。インストール、削除、更新など、パッケージに関する様々な操作を行います。

install:
指定したパッケージをインストールするコマンドです。
-y:
インストールの確認を省略し、全ての確認に「yes」と答えるオプションです。これにより、対話的な確認をせずにインストールを進めることができます。

wget, tar, zlib-devel, openssl-devel:
インストールするパッケージの名前です。

wget: ファイルをダウンロードするためのツールです。
tar: ファイルを圧縮・展開するためのツールです。
zlib-devel: 圧縮ライブラリの開発用パッケージです。
openssl-devel: 暗号化ライブラリの開発用パッケージです。

#### 全体的な意味
このコマンドは、wget、tar、zlib、opensslといった、ソフトウェアをビルドしたり、ネットワークからファイルをダウンロードしたりする際に必要となる基本的なツールをインストールするということです。

#### なぜこれらのパッケージが必要なのか？
wget: ソースコードやライブラリをインターネットからダウンロードする際に使用します。

tar: ダウンロードしたファイルを展開したり、ファイルを圧縮して配布したりする際に使用します。

zlib-devel, openssl-devel: 自作のソフトウェアをビルドする際に、これらのライブラリが必要となる場合があります。zlibは圧縮・解凍、opensslは暗号化に関連する機能を提供します。

#### 具体的な利用シーン
ソフトウェアのソースコードからビルド: ダウンロードしたソースコードを展開し、configure、make、make installといったコマンドでビルドする際に、これらのツールが使用されます。

カスタムなソフトウェアのインストール: パッケージマネージャで提供されていないソフトウェアを、ソースコードからビルドしてインストールする際に必要


### OpenSSHのバージョン変更による影響について

調査すべき項目


OpenSSHのバージョンを変更することは、システムのセキュリティや機能に大きな影響を与える可能性があります。バージョンアップやダウングレードを行う際には、以下の点に注意して慎重に進める必要があります。

バージョンアップによる影響
セキュリティ強化: 新しいバージョンでは、多くの場合、セキュリティ脆弱性が修正されています。そのため、バージョンアップすることで、システムのセキュリティが強化される可能性があります。
新機能の追加: 新しいバージョンでは、新しい機能が追加されていることがあります。例えば、新しい暗号化アルゴリズムのサポートや、より柔軟な設定オプションなどが追加される場合があります。
設定変更: 新しいバージョンでは、デフォルトの設定が変更されている場合があります。そのため、既存の設定ファイルを見直す必要があるかもしれません。
互換性の問題: 古いクライアントとの互換性が失われる可能性があります。特に、新しい暗号化アルゴリズムやプロトコルが導入された場合、古いクライアントでは接続できなくなることがあります。
バージョンダウンによる影響
セキュリティリスク: 古いバージョンには、新しいバージョンで修正されたセキュリティ脆弱性が残っている可能性があります。そのため、システムが攻撃にさらされるリスクが高まります。
機能の制限: 新しいバージョンで追加された機能が利用できなくなります。
設定の変更: 新しいバージョンで追加された設定が利用できなくなります。
バージョン変更時の注意点
バックアップ: バージョン変更前に、システムのバックアップを作成しておきましょう。
設定ファイルの確認: バージョン変更後に、設定ファイルが正しく動作していることを確認しましょう。特に、sshd_configファイルは、ポート番号、認証方法、ログの設定など、重要な設定が含まれているため、慎重に確認する必要があります。
依存関係: OpenSSHは、他のシステムソフトウェアと依存関係を持つことがあります。バージョン変更によって、これらの依存関係が壊れる可能性があるため、注意が必要です。
テスト: バージョン変更後、必ずテスト環境で動作を確認しましょう。特に、外部からアクセス可能なサーバーの場合は、慎重なテストが必要です。
ドキュメントの確認: OpenSSHのリリースノートやマニュアルをよく読み、バージョンアップ/ダウングレードに伴う変更点を確認しましょう。
まとめ
OpenSSHのバージョン変更は、システムのセキュリティや機能に大きな影響を与える可能性があるため、慎重に行う必要があります。特に、セキュリティに関する問題を避けるために、新しいバージョンへのアップデートを定期的に行うことが推奨されます。ただし、バージョンアップによって既存のシステムに問題が発生する可能性も考慮し、十分なテストを行った上で実施するようにしましょう。

バージョン変更を検討する際のポイント

なぜバージョンを変更するのか: セキュリティ強化、新機能の利用、既存の問題の解決など、目的を明確にする。
どのような影響があるのか: バージョン変更によってどのような影響が出るのかを事前に調査する。
リスクを最小限にするには: バックアップ、テスト、ドキュメントの確認など、必要な対策を事前に実施する。
その他
特定のバージョンを選択する理由:
特定の機能が必要な場合
セキュリティ上の問題があるバージョンを回避する場合
古いシステムとの互換性を維持したい場合
バージョン管理: 複数のバージョンのOpenSSHを共存させることも可能です。ただし、設定が複雑になり、管理が難しくなるため、注意が必要


### OpenSSHのバージョン変更による影響を事前に調査する方法
#### 調査すべき項目


##### セキュリティに関する変更点


新しいバージョンでは、どのようなセキュリティ脆弱性が修正されたのか。
新しい暗号化アルゴリズムやプロトコルが導入されたか。
既存の設定でセキュリティリスクが高まる可能性はないか。

##### 機能の追加・削除:

新しいバージョンでどのような機能が追加されたか。
古いバージョンで利用していた機能が削除されたか。
既存のスクリプトや設定ファイルとの互換性があるか。
設定ファイルの変更点:

設定ファイルのフォーマットやオプションが変更されたか。
既存の設定ファイルが新しいバージョンでもそのまま使えるか。

##### 依存関係:
OpenSSHは、他のシステムソフトウェアと依存関係を持つことがあります。バージョン変更によって、これらの依存関係が壊れる可能性があるか。

##### 互換性:
既存のSSHクライアントやサーバーとの互換性があるか。
他のネットワークサービスとの連携に問題はないか。


#### 調査方法


##### リリースノートの確認:
OpenSSHの公式サイトやリリースノートで、バージョンアップに関する詳細な情報を確認しましょう。
新機能、セキュリティ修正、既知の問題などが記載されています。

##### マニュアルの参照:
OpenSSHのマニュアルを参考に、新しいバージョンの設定方法や注意点を確認しましょう。
manコマンドやオンラインマニュアルで参照できます。

##### コミュニティフォーラムの検索:

他のユーザーがバージョンアップを行った際の経験やトラブルシューティングに関する情報が得られることがあります。
Stack OverflowやGitHubのコミュニティフォーラムなどを活用しましょう。

##### テスト環境での検証:

本番環境に影響が出ないように、事前にテスト環境でバージョンアップを行い、動作を確認しましょう。
可能であれば、自動化ツールを使ってテストケースを作成し、繰り返しテストを行うと良いでしょう。
その他の注意点
バックアップ: バージョンアップ前に、必ずシステムのバックアップを作成しておきましょう。
設定ファイルの保存: バージョンアップ前に、既存の設定ファイルをバックアップしておきましょう。
依存関係の確認: パッケージマネージャのツールを使って、依存関係を確認しましょう。

##### ログの確認: バージョンアップ前後で、システムログを確認し、異常な動作がないか確認しましょう。


### まとめ
OpenSSHのバージョン変更は、システムのセキュリティや安定性に大きく影響するため、慎重に行う必要があります。事前に十分な調査を行い、リスクを最小限に抑えましょう。

#### 具体的に調査するべき項目

セキュリティ: 新しいバージョンでは、どのようなセキュリティ脆弱性が修正されたのか？

機能: 新しいバージョンでどのような機能が追加または削除されたのか？
設定: 設定ファイルのフォーマットやオプションに変化はあったか？
互換性: 既存のシステムとの互換性はどうか？
依存関係: 他のソフトウェアとの依存関係に変化はあったか？

これらの項目を網羅的に調査することで、より安全かつスムーズなバージョンアップが可能になります。