はじめに
最近ミニPCを買って久しぶりにUbuntuをセットアップしたのですが、
SSHの設定でハマる箇所があったので共有します。
本記事ではUbunt 23.04を対象としていますが、
実際はUbuntu 22系時点での変更点となります。
1.対象OSバージョン
本記事の対象OSはUbuntu 23.04
です。
選んだ理由はコードネームになっているLunar Lobster
ちゃんが可愛いからです。
PRETTY_NAME="Ubuntu 23.04"
VERSION="23.04 (Lunar Lobster)"
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以降がデフォルトでインストールされています。
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)
* 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_ed25519
、id_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の設定ファイルを開いて、
sudo vim /etc/ssh/sshd_config
末尾に以下を追記します。
HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa
あとはsshdサービスを再起動すれば、引き続きRSA/SHA1の暗号鍵を利用できる状態になります。
sudo systemctl restart ssh.service
3.受付ポートの変更について
次にsshの受付ポートを変更する場合の注意点です。
従来であれば/etc/ssh/sshd_config
に以下のように任意のポート番号を指定して、sshを再起動すれば受付ポートを変更できましたが、
Ubuntu 22.10からはこの方法では変更できません。
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を指定しています。
[Socket]
ListenStream=
ListenStream=12345
※ListenStream=
の空行でデフォルトポート(22)の設定を削除しています
あとはssh.socketとsshdを再起動すれば待ち受けポートが変更されます。
sudo systemctl restart ssh.socket
sudo systemctl daemon-reload
4.最後に
まさかSSHの設定でハマることになるとは思いませんでしたが、初心に帰って素直にリリースノートを確認することの大切さを再認識しました...。
なお本記事内の記載誤り/認識齟齬
、またはこういった設定も罠だ!
みたいなものがあれば、ご連絡いただければ幸いです。