OS: Ubuntu 18.04.6 LTS サーバー
2024/4/5更新
opensshの脆弱性からopenssh9.6へアップグレードした。ところが、sshdサーバーのopensshのバージョンが上がっておらず、嵌ったところがあるので手順をメモ。一部、記憶に頼っているので記載ミスがあるかもしれない。この記事に従って作業する方は自己責任で。(以下、">"は「コマンドプロンプト」を表す。)
前調べ:インストールされているopensshのバージョン
> ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.7+esm3, OpenSSL 1.0.2n 7 Dec 2017
> which openssl
/usr/bin/openssl
make a backup
> sudo cp /usr/bin/openssl /usr/bin/openssl~openssh7.6p1
1) openssh9.6p1を入手しコンパイルインストール
rootで作業をする。
> sudo su
Build essentials
> sudo apt install build-essential zlib1g-dev libssl-dev libpam0g-dev libselinux1-dev libkrb5-dev
Working directory:
> cd ~/Downloads/
> wget -c http://mirror.exonetric.net/pub/OpenBSD/OpenSSH/portable/openssh-9.6p1.tar.gz
> tar -xzf openssh-9.6p1.tar.gz
> cd openssh-9.6p1
> which openssh
/usr/bin/openssl
set -with-ssl-dir= to the head director of the openssl
> ./configure --with-kerberos5 --with-md5-passwords --with-pam --sysconfdir=/etc/ssh --with-ssl-dir=/usr
> make
> sudo make install
Restart your machine
> sudo systemctl restart sshd
> sudo shutdown -r now
Check new version. Open a new terminal and run:
> ssh -V
OpenSSH_9.6p1, OpenSSL 1.1.1 11 Sep 2018
2) ところが、上記でsshサーバー(sshd)もアップグレードされていると思い込んでいたが、上記手順ではどうもそうではない。
外部PCよりssh、オプション-vは接続の詳細をデバッグするため。
> ssh -v <user>@<server>
>>
Remote: ... openSSH_7.6p1...
<<
Remote(即ちserver)はopenssh7.6p1のまま、、、???
そこで、openssh (openssl)がどこにあるかを調べてみると
default install (openssh7.6p1) のsshdは /usr/sbin/sshd
openssh9.6p1は /usr/local/sbin/sshd
(上記(1)のインストールでは、sshdは /usr/local/sbin/sshdにインストールされている。ssh接続が止まらないよう default sshdを入れ替えないのかも?)
システムの自動起動serviceは、
/lib/systemd/system/ssh.service
中身では
ExecStart=/usr/sbin/sshd ...
即ち、defaultのsshd serverが起動されている。
(pathを/usr/local/sbin/sshdに変更して試験してみたが、openssh9.6p1では途中でtimeout、で起動しない。直接 /usr/sbin/sshdを書き換えていたらsshで接続できなくなる、、、危ない、危ない。)
/usr/local/sbin/sshdを起動してみると、
> /usr/local/sbin/sshd
なら走る、、、。そこで、/usr/local/sbin/sshdを自動で走らせるよう、sshd96p1.serviceを /etc/systemd/system に作成
> sudo cd /etc/systemd/system
> vi sshd96p1.service
>>
[Unit]
Description=/usr/local/sbin/sshd service
After=network.target
[Service]
User=root
ExecStart=/usr/local/sbin/sshd
Restart=always
type=simple
[Install]
WantedBy=multi-user.target
<<
> systemctl disable sshd
sshd96p1.serviceを起動
> systemctl daemon-reload
> systemctl enable sshd96p1.service
> systemctl start sshd96p1
これで、PCを再起動しても、外部からのsshにはopenssh9.6p1で返答。
外部> ssh -v <user>@<server>
>>
Remote: ... openSSH_9.6p1 ...
<<
愛でたし、愛でたし。