7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu23でSSHを設定する際の注意点

Last updated at Posted at 2024-01-01

はじめに

最近ミニPCを買って久しぶりにUbuntuをセットアップしたのですが、
SSHの設定でハマる箇所があったので共有します。

本記事ではUbunt 23.04を対象としていますが、
実際はUbuntu 22系時点での変更点となります。

1.対象OSバージョン

本記事の対象OSはUbuntu 23.04です。
選んだ理由はコードネームになっているLunar Lobsterちゃんが可愛いからです。

/etc/os-release 抜粋
PRETTY_NAME="Ubuntu 23.04"
VERSION="23.04 (Lunar Lobster)"

image.png

2.鍵認証で利用できる鍵について

まず鍵認証についてUbuntu 22.04の時点で、
デフォルト設定でRSA/SHA1 暗号方式の鍵(ssh-rsa) が無効となっており鍵認証で利用できなくなっています。

これはOpen SSH 8.8からSSH-1アルゴリズムのRSA鍵が無効となったことに起因しており、Ubuntu 22.04ではOpenSSH_8.9p1が採用されています。

当然Ubuntu 23.04でも以下の通り、Open SSH 8.8以降がデフォルトでインストールされています。

Ubuntu 23.04のOpenSSHバージョン
ssh -V
OpenSSH_9.0p1 Ubuntu-1ubuntu8.5, OpenSSL 3.0.8 7 Feb 2023

そのため鍵認証を利用する場合、以下の選択肢があります。

1.RSA/SHA1 暗号鍵以外を利用する (公式推奨)
2.RSA/SHA1 暗号鍵が利用できるように許可設定を追加する

(1) RSA/SHA1 暗号鍵以外を利用する (公式推奨)

新規に作成するサーバであればRSA/SHA1以外の暗号鍵を使いましょう。

代替となる暗号鍵についてはOpenSSH8.3のリリースノートにて、以下が推奨されています。

推奨されている暗号鍵 (暗号化アルゴリズム)
・SHA-2アルゴリズム(rsa-sha2-256/512)
・ED25519アルゴリズム(ssh-ed25519)
・ECDSAアルゴリズム(ecdsa-sha2-nistp256/384/521)
Open SSH 8.3 リリースノート抜粋
 * The RFC8332 RSA SHA-2 signature algorithms rsa-sha2-256/512. These
   algorithms have the advantage of using the same key type as
   "ssh-rsa" but use the safe SHA-2 hash algorithms. These have been
   supported since OpenSSH 7.2 and are already used by default if the
   client and server support them.

 * The ssh-ed25519 signature algorithm. It has been supported in
   OpenSSH since release 6.5.

 * The RFC5656 ECDSA algorithms: ecdsa-sha2-nistp256/384/521. These
   have been supported by OpenSSH since release 5.7.

暗号化アルゴリズムはssh-keygenで鍵を作成する際に、-tオプションで以下が指定できます。

指定できる暗号化アルゴリズム
dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa

例として以下ではed25519を指定しています。

鍵作成 コマンド例
ssh-keygen -t ed25519

その後ssh-keygenを実行したサーバの$HOME/.ssh/配下にid_ed25519id_ed25519.pubが作成されるので、
ssh-copy-idを実行して接続先のサーバに作成した公開鍵を登録すればOKです。

公開鍵登録 コマンド例
ssh-copy-id -i ${PubKeyName} ${UserName}@${HostName or IPaddress}

(2) RSA/SHA1 暗号鍵が利用できるように許可設定を追加する

sshdの設定ファイルで許可設定を追加することで、引き続きRSA/SHA1の暗号鍵を利用することもできます。
既存のUbuntuサーバをアップデートしたけど、RSA/SHA1の暗号鍵はそのまま使いたい...
といった場合はこの方法が有用です。
鍵を作り直してでも、RSA/SHA1以外を利用することがベストだとは思いますが...。

まずはsshdの設定ファイルを開いて、

sshd設定ファイル
sudo vim /etc/ssh/sshd_config

末尾に以下を追記します。

追記内容
HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa

あとはsshdサービスを再起動すれば、引き続きRSA/SHA1の暗号鍵を利用できる状態になります。

sshdの再起動
sudo systemctl restart ssh.service

3.受付ポートの変更について

次にsshの受付ポートを変更する場合の注意点です。
従来であれば/etc/ssh/sshd_configに以下のように任意のポート番号を指定して、sshを再起動すれば受付ポートを変更できましたが、
Ubuntu 22.10からはこの方法では変更できません。

従来のポート設定方法 (/etc/ssh/sshd_config)
Port 12345

これはUbuntu 22.10から、デフォルトでSSHサーバーがsystemdのSocket-Based Activationを利用して起動されるようになったことに起因しています。
これによりssh.socketの設定ファイルにて受付ポートを指定する方式となり、/etc/ssh/sshd_configで設定しても反映されません。
(私はこれで30分以上悩みました...。)

ssh.socketの設定ファイルは、
/etc/systemd/system/sockets.target.wants/ssh.socket、であり
このファイルは/lib/systemd/system/ssh.socketへのシンボリックリンクとなっています。

なので/lib/systemd/system/ssh.socket内の、ListenStreamの記述で受付ポートを指定できます。
以下の例では、デフォルトポート(22)の代わりに12345を指定しています。

受付ポート指定 (/lib/systemd/system/ssh.socket)
[Socket]
ListenStream=
ListenStream=12345

ListenStream=の空行でデフォルトポート(22)の設定を削除しています

あとはssh.socketとsshdを再起動すれば待ち受けポートが変更されます。

ssh.socket再起動
sudo systemctl restart ssh.socket
sudo systemctl daemon-reload

4.最後に

まさかSSHの設定でハマることになるとは思いませんでしたが、初心に帰って素直にリリースノートを確認することの大切さを再認識しました...。

なお本記事内の記載誤り/認識齟齬、またはこういった設定も罠だ!みたいなものがあれば、ご連絡いただければ幸いです。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?