2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

化石マシンにssh で接続できなくなった 〜FreeBSD 15.0-RELEASE で困ったこと(2)

2
Last updated at Posted at 2025-12-25

前回
https://qiita.com/s_mitu/items/2efa89458cad6b9db440

に引き続き、FreeBSD 15.0-RELEASE で困ったことについて (実際に困ったときは 15.0-PRERELEASE の時分でしたが)。

OpenSSH で DSA ホストキーしか無いマシンに接続できない

 前回でも触れましたが、FreeBSD 15.0-RELEASEから OpenSSH は DSA が無効化されてビルドされるようになりました。

 そのため、ホスト鍵として DSA のみしか生成していない古い ssh サーバーマシンには接続できなくなります。
 最近の OpenSSH では、DSA はビルドはされていても非推奨で、デフォルトの接続では ssh 接続のときの暗号化の候補から外されています。無理やり DSA を使った接続をさせたいときは、オプションで

% ssh -o HostKeyAlgorithms=+ssh-dss very_oldhost

などとします。
 また、決まった接続先だけ DSA 接続させたい場合は ~/.ssh/config

~/ssh/config
Host very_oldhost
    User user
    HostKeyAlgorithms +ssh-dss
    HostName xxx.org

と設定しておくと、オプションを省略することができました。

 しかし、DSA のコードがビルドすらされなくなった 15.0-RELEASE からは、オプションしていでも config 指定でも

home/user/.ssh/config line 50: Bad key types '+ssh-dss'.

などと怒られてしまいます。

サーバーをいじれるならば RSA ホストキーを追加

 サーバーの設定がいじれるならば、RSA 鍵は使えるので、 RSA ホスト鍵など他の種類の鍵を生成すれば接続できるようになります。

/etc/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key

 古い sshd でも RSA なら対応してるので、むりやり切られた暗号化を何とかするよりは健全といえるでしょう。

 しかしサーバーが自分でいじれるとは限らないわけで、諸事情で設定変更が叶わないということもあります。
 古い FreeBSD の OpenSSH sshd のデフォルトは、DSA 鍵しか生成しない設定になっていて、そこから動かせないという状況もあったりします。組み込みマシンで接続はデバッグ用途のみとかそんな状況です。

 そんな状況で困っている人はあまり多くはないとは思うのですが、まぁ一応私なりの解決法を。

ports の OpenSSH-portable を 10.0p1 の時代に戻す

OpenSSH は pkg/ports にも openssh-portable という名前で入っています。しかし現在の ports は base よりも新しいバージョン(2025/12 時点では10.2p1、base は 10.0p2)となっていて、ソースコードから完全に DSA が消えています。
ソースに DSA のコードが残っているのは 10.0p1 までです。そこで、まずは openssh-portable の ports を 10.0p1 まで戻します。
cgit.freebsd.org で git バージョン管理されている公式 ports ツリーでは、hash 値 8f4607278deeb9e12b2f444a478a488ac733af65 が 10.0p1 の最後のバージョンなので、

% git clone https://git.FreeBSD.org/ports.git
% cd ports
% git checkout 8f4607278deeb9e12b2f444a478a488ac733af65

で、 10.0p1 の頃の ports tree を取得します。

 そのまま make しても、DSA はビルドされませんし、make config の設定にもありません。
 OpenSSH のソースの中では WITH_DSA が定義されているかで DSA 関連のソースをビルドするか決まっているので、WITH_DSA を define 指定してビルドしないと DSA は有効となりません。
 そこで環境変数 CFLAGS-DWITH_DSA を指定して、cc が WITH_DSA を定義しながらコンパイルされるようにします。

% cd security/openssh-portable
% sudo env CFLAGS=-DWITH_DSA make install

これで /usr/local/bin/ssh に DSA が使える ssh がインストールされます。

 ちなみに、make 前にmake configBLACKLISTD にうっかりチェックを入れてしまうとビルドできません。このバージョンの ports は BLACKLISTD 用パッチがおかしいため、パッチに失敗してビルドできなくなってしまいます。今回のような場合には不要なオプションなので、外しておきましょう。

openssh-makeconfig.png
チェックが外れているか確認ヨシ!

隔離環境に入れたほうが良いかも

 このような独自ビルドの pkg/ports は勝手に更新されては困るので、 pkg lock openssh-portable などとするのですが、依存している pkgの更新が道連れで更新されなくなってしまいます。
 そもそも弱い暗号化を有効にしているようなコマンドをメイン環境に入れてしまうのは気持ち悪いので、jail や VM などの隔離環境に入れるのが良いかもしれません。

2
0
1

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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?