Linux/sshdでDSA認証を有効化

openSSH を既存とは別にインストールして、手動起動する(2026-04-18)



自前の sshクライアントアプリ の動作確認のために、DSA認証をサーバ側で一時的に有効化する必要がありました。
(現在はセキュリティ上の問題でDSAは非推奨)

なので、公式( https://www.openssh.org/portable.html )から持ってきた OpenSSHのソース(今回の例では 9.9)を /usr/local/src/openssh-9.9/ あたりにでも展開してから、インストールします。

実行環境は AlmaLinux release 9.6 です。
以下、基本的に sudo か root での作業になります。


インストール時の注意点として、

  • 既存openSSH と被らないように prefix を指定して
  • DSAを忘れずに有効化します
 cd /usr/local/src/openssh-9.9
 ./configure --prefix=/usr/local/openssh-9.9 --with-pam --with-ssl-engine --enable-dsa-keys


libcrypto が見つからないエラーが出たので

# 以下は手抜きで / 直下から探してますが
# 時間がかかるので /usr と /lib と /lib64 あたりを探せば十分?
find / -type f -name "libcrypto*" -print

で探してみれば、うちの環境では /usr/lib64/libcrypto.so.3.2.2 が見つかったので、

ln -s /usr/lib64/libcrypto.so.3.2.2 /usr/lib64/libcrypto.so

でリンクを作ったうえで、上記のconfigureコマンドに「 -L/usr/lib64 」 オプションを追加。


同様にヘッダ(〜.h)が見つからない、pam なんとかが見つからない、みたいなエラーが出て、find しても見つからなかったので、

dnf install [見つからないパッケージ]-devel

のように開発 devel 版パッケージを追加インストールしました。



どうにか configure が通るようになったら、あとは make して make install します。



無事にインストールできたら、
/usr/local/openssh-9.9/etc/sshd_config で必要な設定を変更します。

ポート番号が既存の sshd と被らないように、あとファイアウォールなどある場合は一時的に使うポートを開放しましょう。

ファイアウォールの設定は、firewall-cmd の場合は、

# まず、各ポートのルール設定が
# /usr/lib/firewalld/services/ にあるので
# そこにある ssh の設定をもとに、自分用 ssh を複製、ポート番号を編集する
cp -pi /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/your_ssh.xml
vi /usr/lib/firewalld/services/your_ssh.xml # ポート番号を変更
 
# 変更したポート番号の有効化
firewall-cmd --add-service=your_ssh --zone=public --permanent      # ルールの追加
# firewall-cmd --remove-service=your_ssh --zone=public --permanent # ルールの削除
firewall-cmd --reload  # 変更後に有効化するのを忘れずに


(一時的なものなら permanent にする必要は無かったかもしれませんが)
ともかく、ポートをあけたら sshd の設定も合わせて変更します。

vi /usr/local/openssh-9.9/etc/sshd_config
#Port 22
Port 10022 # どこか適当なポート番号を指定
 
# DSA 関連を一時的に有効化する
DSAAuthentication yes
PubkeyAcceptedKeyTypes +ssh-dss
PubkeyAcceptedAlgorithms +ssh-dss


設定したら、試しにconfigの内容が問題ないか検証。

/usr/local/openssh-9.9/sbin/sshd -t -f /usr/local/openssh-9.9/etc/sshd_config


問題なさそうなら、sshd をそのままフォアグラウンドで実行。
既存の sshd とは別に、もう一つの sshd が別ポートで起動している状態になります。

/usr/local/openssh-9.9/sbin/sshd -4 -d -d -d -e
 # デバッグログ付きで起動。-d は3つで最大。
 # -4 はIPv4で起動する場合なので、必要なら -6 も


あとは接続するポート番号に気をつけつつ、sshクライアントで接続します。


一時的な検証なら、バックグラウンドよりフォアグラウンドで起動したほうが楽な気がします。
接続状態がすぐにわかるし、うっかり停止し忘れることもないですし。